Bir alt sorgu tarafından değiştirilmiş sonuçları döndüren bir SQL deyimi veya geri dönmeye çalıştığınız bilgilerle ilgilenen bir katılım veya başka bir şey nasıl yapılır? ÖrneğinSQL: * Farklı * satırların değerlerine göre satırları seçmek için "DEĞİL" seçeneği?
:
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');
Yani
homer
Takımına karar veremez, bu yüzden hem var:
CREATE TABLE bowlers (
bowling_id int4 not null primary key auto_increment,
name text,
team text
);
Birisi yanlış birden fazla takımda olabilir. Do'h!
pin pals
takımında olmayan herkesi tanımak istiyorum the homer team
. Yapabileceğim en iyi şudur:
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');
sonuçlanan: Bildiğiniz,
+-----------------------+----------------+
| 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)
, parlak!
alt sorgu B, birkaç satır D. Büyük A ila yüzbinlerce için oldukça kötü, sorgu her sonucu aday olacak gibi performans, yaşayacaktır satırlar.
Daha iyi bir yol nedir? Çoğunlukla kendi kendine bir katılımın hile yapacağını düşünüyordum, ama kafamı bunun üzerine nasıl yapacağım.
kullanmadan, bunu yapmak için başka yolları var mı, NOT IN(SELECT ...)
Ayrıca
, sorunun bu tip adı nedir?
sol dıştan içe kendinize ait olanı istediğiniz şeydir. –