বাম টেবিলের উপস্থিতিগুলির চেয়ে কীভাবে একটি বাম আউটয়ার যোগ দিতে পারে আরও রেকর্ড ফিরিয়ে দিতে?


164

বাম টেবিল থেকে সমস্ত ফলাফল এবং আরও বড় টেবিল থেকে কিছু অতিরিক্ত তথ্য ফিরিয়ে আনতে আমার কাছে খুব বেসিক বাম আউটয়ার জয়েন রয়েছে। বাম টেবিলটিতে এখনও 4935 রেকর্ড রয়েছে যখন আমি বাইরে থেকে যোগদান করি এটি একটি অতিরিক্ত টেবিলের সাথে রেকর্ডের গণনা উল্লেখযোগ্য পরিমাণে বড়।

যতদূর আমি অবগত রয়েছি এটি পরম সুসমাচার যে একটি বাম আউট জয়েন ডান টেবিল থেকে মিলে যাওয়া রেকর্ড সহ বাম টেবিল থেকে সমস্ত রেকর্ড ফিরিয়ে দেবে এবং কোনও সারি মিলে যায় না এমন নাল মান, যেমন এটি আমার বুঝতে হবে যে এটি করা উচিত বাম টেবিলের চেয়ে আরও বেশি সারি ফিরিয়ে দেওয়া অসম্ভব, তবে এটি একই ঘটছে!

এসকিউএল অনুসন্ধান অনুসরণ:

SELECT     SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM         SUSP.Susp_Visits LEFT OUTER JOIN
                      DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum

সম্ভবত আমি বাক্য বাক্যটিতে ভুল করেছি বা লেফট আউটর জয়েন সম্পর্কে আমার উপলব্ধি অসম্পূর্ণ, আশা করি কেউ কীভাবে এটি ঘটতে পারে তা ব্যাখ্যা করতে পারবেন?

পুনশ্চ

দুর্দান্ত উত্তরের জন্য ধন্যবাদ, বাম আউট জয়েন সম্পর্কে আমার বোঝাপড়া এখন আরও অনেক ভাল, তবে কেউ কি এই কোয়েরিটি সংশোধন করার কোনও উপায়ের পরামর্শ দিতে পারে যাতে আমি কেবল বাম সারণীতে বিদ্যমান যতগুলি রেকর্ড পেয়েছি সেগুলি পাওয়া যায়?

এই কোয়েরিটি খালি কোনও প্রতিবেদন তৈরি করার জন্য এবং ডুপ্লিকেট মিলগুলি কেবল বিষয়গুলিকে বিভ্রান্ত করে।

/ পুনশ্চ


5
"বাম টেবিলটিতে বিদ্যমান যতগুলি রেকর্ড উপস্থিত রয়েছে তা পেতে" আপনার একাধিক ম্যাচ আছে কিনা তা বেছে নিতে ডান দিক থেকে কোন সারিটি নির্দিষ্ট করতে হবে।
এ কে

1
আপনি কিভাবে এটি নির্দিষ্ট করবেন? আমি চাই প্রথম ম্যাচটি ফিরে আসুক।
সাইমন ক্রস

1
আপনাকে প্রথম ম্যাচ বলতে বোঝাতে হবে। আপনি কি সর্বাধিক রেকর্ড চান, সর্বোচ্চ আইডি সহ একটি বা কী?
এইচএলজিইএম

1
আপনি যদি অতিরিক্ত টেবিলে প্রাথমিক কীটির সাথে মেলে আপনার বক্তব্যটি সঠিক।
প্রজেথ গ্যাজেজ

আমি প্রায়ই মত একটি সম্পদ ব্যবহার এই যখন প্রশ্নের বিল্ডিং একটি ঠকাই শীট হিসাবে। লিঙ্কটি যদি কখনও মারা যায়, কেবল গুগল এসকিএল যোগ দিন ; তারা বিভিন্ন ধরণের যোগদানের ভেন ডায়াগ্রাম।
জিমানো

উত্তর:


189

বাম আউটর জয়েন যেখানে সম্ভব সেখানে ডান টেবিলের সাথে যুক্ত বাম টেবিলের সমস্ত রেকর্ড ফিরিয়ে দেবে।

যদিও যদি ম্যাচগুলি থাকে তবে এটি সমস্ত সারি মেলে যা তারপরে ফিরে আসবে, অতএব, বামে থাকা একটি সারি যা ডানদিকে দুটি সারি মিলে যায় কেবল একটি অন্তর্ভুক্ত যোগদানের মতোই দুটি ROWS হিসাবে ফিরে আসবে।

সম্পাদনা: আপনার সম্পাদনার প্রতিক্রিয়া হিসাবে, আমি আপনার ক্যোয়ারীতে আরও একবার নজর রেখেছি এবং দেখে মনে হচ্ছে আপনি কেবল বাম টেবিল থেকে ডেটা ফিরছেন। অতএব, যদি আপনি কেবল বাম টেবিল থেকে ডেটা চান এবং আপনি কেবল বাম টেবিলের প্রতিটি সারিটির জন্য একটি সারি ফেরত চান, তবে আপনাকে কোনও জোইন সম্পাদন করার দরকার নেই এবং কেবল বাম টেবিল থেকে সরাসরি একটি নির্বাচন করতে পারেন।


1
ডান টেবিলের সাথে যুক্ত হওয়ার কারণ ছিল তাই আমি কেবল বাম থেকে রেকর্ড পেয়েছি যেখানে ডান টেবিলটিতে কমপক্ষে একটি রেকর্ড রয়েছে তবে ব্যাখ্যাটির জন্য আপনাকে অনেক ধন্যবাদ।
জে উইল্ড


39

এটা অসম্ভব নয়। বাম সারণীতে রেকর্ডের সংখ্যা হ'ল ন্যূনতম সংখ্যার যা এটি ফিরে আসবে। ডান টেবিলের দুটি রেকর্ড রয়েছে যা বাম টেবিলের একটি রেকর্ডের সাথে মেলে, এটি দুটি রেকর্ড ফিরিয়ে দেবে।


12

আপনার পোস্টের স্ক্রিপ্টের জবাবে, এটি আপনি কী চান তার উপর নির্ভর করে।

আপনি আপনার বাম টেবিলের প্রতিটি সারির জন্য একাধিক সারি পাচ্ছেন (সম্ভব) কারণ এতে যোগদানের শর্তের জন্য একাধিক মিল রয়েছে। যদি আপনি চান যে আপনার মোট ফলাফলের ক্যোয়ারির বাম অংশে রয়েছে একই সংখ্যক সারি রয়েছে তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার যোগদানের শর্তগুলি 1-থেকে -1 ম্যাচের কারণ হতে পারে।

বিকল্পভাবে, আপনি যা চান তা নির্ভর করে আপনি সামগ্রিক ফাংশনগুলি ব্যবহার করতে পারেন (উদাহরণস্বরূপ আপনি যদি ডান অংশ থেকে কেবল একটি স্ট্রিং চান তবে আপনি একটি কলাম তৈরি করতে পারেন যা সেই বাম সারিটির জন্য ডান পাশের ফলাফলগুলির একটি কমা বিস্মৃত স্ট্রিং।

আপনি যদি কেবল বাহ্যিক যোগদানের 1 বা 2 টি কলাম দেখেন তবে আপনি 1 ফলাফলের গ্যারান্টিযুক্ত হবেন তাই আপনি একটি স্কেলার সাবকিউরি ব্যবহার করার বিষয়টি বিবেচনা করতে পারেন।


4
এটি একটি ভাল উত্তর, যেহেতু এটি বাম টেবিল থেকে কেবল সারিগুলি কীভাবে ফিরিয়ে আনতে পরামর্শ দেয়।
কর্নস

9

বাম টেবিল থেকে প্রতিটি রেকর্ড ডান টেবিলের সাথে মিল রয়েছে এমন রেকর্ড হিসাবে যতবার ফিরে আসবে - কমপক্ষে 1, তবে সহজেই 1 এর বেশি হতে পারে।


8

বাম আউটয়ার জয়েন ঠিক যেমন অন্তর্ভুক্ত হবে (সাধারণ যোগদান) ডান টেবিলের সাথে মিলবে যতগুলি ম্যাচ এটি বাম টেবিলে প্রতিটি সারির জন্য অনেকগুলি ফলাফল ফিরে আসবে। সুতরাং আপনার প্রচুর ফলাফল হতে পারে - এন এক্স এম পর্যন্ত, যেখানে এন বাম টেবিলের সারি সংখ্যা এবং এম ডান টেবিলের সারি সংখ্যা।

এটি সর্বনিম্ন ফলাফলের সর্বদা গ্যারান্টিযুক্ত বাম আউটরের সাথে অন্তত এন হতে হবে N


1
আমি ভাবতে শুরু করি যখন সারিগুলির সংখ্যা N N এম এর সমান হয় এবং আমার মনে একমাত্র আসল পরিস্থিতি আসে যখন N বা M সমান হয় 1. আপনি কি সম্মত হন?
বার্তোসজমিলার

2
না, আমি না। কেবলমাত্র মূল সমতাতে যোগদান হিসাবে আপনার যোগদানের শর্তটি ভাবা উচিত নয়। এটি স্বেচ্ছাসেবী শর্ত হতে পারে, যেমন তারিখের ব্যাপ্তি, বৈষম্য ইত্যাদি extreme দুটি চরম ঘটনা: (ক) এন সারিগুলির মধ্যে এম সারিগুলির মধ্যে একটিও মিল নেই, তারপরে বাম বাহিরের যোগদানের ফলাফলগুলি এনআরএলগুলির সাথে মিলে যায় r (খ) প্রতিটি এন সারির প্রতিটি এম সারিগুলির সাথে মেলে, তারপরে ফলাফল এন এক্স এম সারি সেট করা হয়।
টপচেফ

1
আপনি ঠিক বলেছেন, আমি মূল কী সাম্যের দিক দিয়ে যোগ দেওয়ার বিষয়ে ভাবছিলাম। আমি "কেস বি" থেকে আপনার উদাহরণটি পছন্দ করি। আমি বিশ্বাস করি যে "এন সারিতে প্রতিটি এন সারিতে সমস্ত মিল থাকে" এন এক্স এম সারিগুলি কখন ফিরে আসে তার একটি সাধারণ রেসিপি, যা কেবল কী মূল্যের সাম্যতার কথা চিন্তা করে কল্পনা করা অসম্ভব।
বার্তোসজমিলার


6

বাম বাহিরের জোড় যুক্ত কোয়েরির "ডানদিকে" টেবিলের যদি আপনার কাছে কোনও ধারা আছে তবে মনোযোগ দিন ... যদি আপনার অনুচ্ছেদে ডানদিকে কোনও রেকর্ড না থাকে যেখানে অনুচ্ছেদটি সন্তুষ্ট করে থাকে, তবে 'বাম দিকের সংশ্লিষ্ট রেকর্ড 'সারণী আপনার প্রশ্নের ফলাফল হিসাবে উপস্থিত হবে না ....


1
তারপরে আপনার শর্তটি সংশ্লিষ্ট লেফট আউটয়ার জয়েনের অন ক্লজে যুক্ত করা উচিত।
মিক

6

আপনার যদি ডান দিক থেকে কেবল কোনও এক সারি প্রয়োজন হয়

SELECT SuspReason, SiteID FROM(
    SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID, ROW_NUMBER()
    OVER(PARTITION BY SUSP.Susp_Visits.SiteID) AS rn
    FROM SUSP.Susp_Visits
    LEFT OUTER JOIN DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
) AS t
WHERE rn=1

বা শুধু

SELECT SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM SUSP.Susp_Visits WHERE EXISTS(
    SELECT DATA.Dim_Member WHERE SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum
)

1
কারণ আপনি ডিডিএল এবং ডিএমএল সরবরাহ করেন নি, আমি পরীক্ষা করিনি। যাইহোক আমি মনে করি যে আপনি যা চান তা বিদ্যমান is এটি ব্যবহার করে দেখুন: সাসপ্রেসন, সাইটআইডি থেকে নির্বাচন করুন (নির্বাচন করুন এসএসপি.সপ্প_ভিজিটস.সুস্পারসন, এসইএসপি.সুস্প_ভিজিটস.সাইডআইডি, রাউ_উইউবিউট () এসএসএসপি_সভিট_সভিটিস.এসসিপি_সভিটসভিসসিটিসভিসসিটিসভিউএসসিটিএসসিএসসিটিএসসি'র মাধ্যমে নয় ডেটা যোগ দিন।ডিম_সেম্বার অন এসএসপি.সুফ_ভিজিটস। মেমিড = ডেটা.ডিম_মেম্বার.মেম্বারশিপনাম) কোথায় কোথায় rn = 1
এ কে

2

দেখে মনে হচ্ছে যে DATA- এ একাধিক সারি রয়েছে।


2

যদি ডিম_মেম্বারে একাধিক (এক্স) সারিগুলি সাসপ_ভিজেটগুলিতে একটি একক সারির সাথে যুক্ত হয় তবে রেজুল সেটে এক্স সারি থাকবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.