मेरे तालिका:चेक स्तंभ
id attribute
1 2
1 2
2 3
2 4
5 1
5 1
6 3
6 3
6 5
अब मैं केवल उत्पादन करना चाहते हैं उन id
attribute
साथ, विशेषता प्रत्येक id
के लिए एक ही है अगर।
इस नमूने तालिका में, उत्पादन होगा
id attribute
1 2
5 1
मेरे तालिका:चेक स्तंभ
id attribute
1 2
1 2
2 3
2 4
5 1
5 1
6 3
6 3
6 5
अब मैं केवल उत्पादन करना चाहते हैं उन id
attribute
साथ, विशेषता प्रत्येक id
के लिए एक ही है अगर।
इस नमूने तालिका में, उत्पादन होगा
id attribute
1 2
5 1
आप इस दृष्टिकोण का उपयोग कर सकते हैं:
SELECT DISTINCT id, attribute
FROM test t1
WHERE (SELECT count(DISTINCT attribute)
FROM test t2
WHERE t2.id = t1.id) = 1
एक बेहतर दृष्टिकोण हो सकता है:
SELECT
DISTINCT t1.id, t1.attribute
FROM
test t1,
(
SELECT
id,
count(DISTINCT attribute) COUNT
FROM
test
GROUP BY
id
HAVING
COUNT = 1
) t2
WHERE
t1.id = t2.id
ठीक है, मैं डी इसके बजाय निम्न दृष्टिकोण का उपयोग करें:
SELECT DISTINCT ta.id, ta.attribute
FROM test ta
LEFT JOIN test tb
ON ta.id = tb.id AND ta.attribute <> tb.attribute
WHERE tb.id IS NULL;
... जैसा कि मैं आमतौर पर कम से कम घोंसला वाले प्रश्नों को प्रतिस्थापित तालिकाओं के साथ बदलने की कोशिश करता हूं। बेशक, यदि आपकी मेज छोटी है, तो इससे कोई फर्क नहीं पड़ता।
नेस्टेड प्रश्न तब तक ठीक होते हैं जब आप उन पर शामिल होते हैं, बजाय उन्हें एक चयन/कहां/ऑन क्लॉज में डालने के बजाय। इस तरह एक टेबल में शामिल होना हालांकि बेहतर नहीं है; तालिका बढ़ने के साथ प्रसंस्करण समय अभी भी तेजी से बढ़ जाएगा। ऐसा करने के सबसे प्रभावी तरीके के लिए – Braiba
SELECT id, MIN(attribute) AS attribute
FROM test
GROUP BY id
HAVING COUNT(DISTINCT attribute) = 1 ;
या:
SELECT id, MIN(attribute) AS attribute
FROM test
GROUP BY id
HAVING MIN(attribute) = MAX(attribute) ;
मैं (id, attribute)
+1। MIN = MAX चीज वास्तव में चालाक है; मैं भविष्य के लिए उस चाल को याद रखूंगा। – Braiba
मुझे वास्तव में यह जवाब भी पसंद है। एसओ पर शिष्टाचार क्या है? सबसे पहले सेवा या सबसे अच्छा जवाब आओ? –
@Terry Uhlang सर्वश्रेष्ठ उत्तर मुझे सबसे ज्यादा समझ में आता है क्योंकि यह एक ही समस्या वाला पहला अन्य उपयोगकर्ता होगा जब वे इस प्रश्न की खोज करेंगे। – Braiba
इस विधि पर एक सूचकांक के साथ काफी कुशल होने का अंतिम संस्करण उम्मीद होती है, बहुत अक्षम है, क्योंकि यह हर पंक्ति के लिए कि भीतर जिज्ञासा चलाएगा परीक्षण में टेबल बढ़ने के साथ ही यह प्रदर्शन को बहुत तेज़ी से प्रभावित करना शुरू कर देगा। – Braiba
@ ब्राइबा: आप सही हैं। दूसरा दृष्टिकोण जटिलता को कम कर सकता है। –
आंतरिक क्वेरी कार्यशील रूप से यपरक्यूब के पहले जैसा ही है; मैं नहीं देखता कि बाहरी क्वेरी यहां क्या जोड़ती है, या क्या मुझे कुछ याद आ रहा है? – Braiba