2012-06-10 16 views
24

Şimdiye kadar böyle düşünemiyorum. İki tabloyu birleştirmeye çalışıyorum ve yalnızca B tablosunda eşleşen bir sütuna sahip olmayan A tablosundaki satırları seçiyorum. Örneğin, bir kullanıcı masasının ve gönderilen bir tablonun olduğunu varsayalım.MySQL, diğer tabloda eşleşen sütun bulunmayan satırları seç

users tabloda aşağıdaki sütunlar bulunmaktadır: id, username

Ben usernamesent tabloda yok nereye users tüm satırları seçmek istiyorum: id, username
sent tablo aşağıdaki sütunları vardır. Yani, tomusers içinde ve sent ise, seçilmeyecektir. O, users'daysa ancak sent'da değilse seçilecektir. Bu çalıştı ama hiç işe yaramadı:

SELECT pooltest.name,senttest.sentname 
FROM pooltest,senttest 
WHERE pooltest.name != senttest.sentname 

cevap

12

bu SQL deneyin:

SELECT users.username 
FROM users 
LEFT JOIN sent ON sent.username = users.username 
WHERE sent.username IS NULL; 

Bence iyi bir yol olacaktır: Her iki As

SELECT users.username 
FROM users 
LEFT JOIN sent ON sent.id = users.id 
WHERE sent.id IS NULL; 

id alanları endeksli olacağını (birincil anahtar ı sanırdım) bu yüzden Bu sorgu önerdiğim ilkinden daha iyi olacaktı.

Ancak, ilk öneriyi sizin için daha iyi bulabilirseniz, bu sizin uygulamanız için gereksinimlerinizin ne olduğuna bağlıdır.

+0

sorununuzu çözecektir Aynı sorun vardı ama bu sorguyu

INSERT INTO tbl1 (id,name) SELECT id,name from tbl2 where (name) not in(select name from tbl1); 

umut kullanılarak çözüldü diğer yardım da bunu işe yaradı: SELECT * FROM pooltest LEFT JOIN senttest ON pooltest.name = senttest.sentname NEREDE senttest.sentname IS NULL – xendi

53

Genellikle, sorguda

SELECT p.Name 
FROM pooltest p 
WHERE NOT EXISTS (SELECT s.Name 
        FROM senttest s 
        WHERE s.Name = p.Name) 

bu tür NOT EXISTS kullanacağı alternatif bir LEFT OUTER JOIN kullanıp NULL

kontrol etmek olurdu
SELECT p.Name 
FROM pooltest p 
     LEFT OUTER JOIN senttest s ON s.Name = p.Name 
WHERE s.Name IS NULL 

Kullandığınız örtülü birleştirme sözdiziminin geçersiz olduğunu ve açık bir birleştirmeyle değiştirilmesi gerektiğini unutmayın.

-3

bu size yardımcı olabilir olabilir ....

Ben bu bazı aracılığıyla