आप एक SQL कथन कैसे बनाते हैं जो एक सबक्वायरी द्वारा संशोधित परिणाम लौटाता है, या कोई अन्य - या कुछ और, जो उस जानकारी से संबंधित है जो आप लौटने की कोशिश कर रहे हैं?एसक्यूएल: * अलग * पंक्तियों के मूल्यों के आधार पर पंक्तियों का चयन करने के लिए "नहीं" विकल्प?
उदाहरण के लिए:
CREATE TABLE bowlers (
bowling_id int4 not null primary key auto_increment,
name text,
team text
);
किसी ने गलत तरीके से एक से अधिक टीम पर हो सकता है:
INSERT INTO `bowlers` (`name`, `team`) VALUES
('homer', 'pin pals'),
('moe', 'pin pals'),
('carl', 'pin pals'),
('lenny', 'pin pals'),
('homer', 'The homer team'),
('bart', 'The homer team'),
('maggie', 'The homer team'),
('lisa', 'The homer team'),
('marge', 'The homer team'),
('that weird french guy', 'The homer team');
तो homer
उनकी टीम पर तय नहीं कर सकता, तो वह दोनों पर है। Do'h!
मैं the homer team
पर मौजूद सभी लोगों को जानना चाहता हूं जो pin pals
टीम पर भी नहीं हैं।
+-----------------------+----------------+
| name | team |
+-----------------------+----------------+
| bart | The homer team |
| maggie | The homer team |
| lisa | The homer team |
| marge | The homer team |
| that weird french guy | The homer team |
+-----------------------+----------------+
5 rows in set (0.00 sec)
कौन सा, तुम्हें पता है, शानदार: सबसे अच्छा मैं कर सकता हूँ यह है:
SELECT a.name, a.team
FROM bowlers a where a.team = 'The homer team'
AND a.name
NOT IN (SELECT b.name FROM bowlers b WHERE b.team = 'pin pals');
में परिणामस्वरूप!
प्रदर्शन, के रूप में भुगतना होगा सबक्वेरी क्वेरी, जो बी में कुछ पंक्तियों के लिए डी ग्रेट के लिए एक के लिए है, सैकड़ों हजारों के लिए बहुत बुरा की प्रत्येक परिणाम के लिए चलाया जा रहा है पंक्तियों।
बेहतर तरीका क्या है? मैं ज्यादातर सोच रहा हूं कि एक आत्म चाल चलाना होगा, लेकिन मैं अपने सिर को लपेट नहीं सकता कि यह कैसे करें।
वहाँ का उपयोग किए बिना ऐसा करने के लिए, किसी भी अन्य तरीके हैं, NOT IN(SELECT ...)
इसके अलावा, क्या इस प्रकार की समस्या के लिए नाम क्या है?
बाएं बाहरी वापस अपने आप में शामिल होना चाहते हैं जो आप चाहते हैं। –