2012-07-16 42 views
32

Bu tabloya, MySQLMYSQL Left Join NULL değerleri nasıl seçerim?

ile ilgili son soruma bir son bir sorum olduğunum Sol katılmış tablodan NULL değerleri seçebilmem gerekiyor. İşte

var benim katılmak:

table1.id | table1.name | table2.id | table2.surname 
     1 |  John |   1 |   Doe 
     2 |  Michael |   2 |  Anderson 
     3 |  Anna |  NULL |   NULL 
     4 |   Sue |  NULL |   NULL 
Ben table2.surname = NULL, ancak bunun iş gibi bir sorgu

SELECT table1.*,table2.* 
FROM table1 
LEFT JOIN table2 
    ON table1.id=table2.id 
WHERE table2.surname=NULL 

Ben biraz arkasında mantık değil anlayabileceği NEREDE seçmek isterim

Bana herhangi bir sonuç veriyor, ama sonuçlara ulaşmanın bir yolu olmalı?

böyle, IS NULL yüklemi kullanmak zorunda NULL değerlerini karşılaştırmak için herhangi bir yardım

cevap

39

takdir:

SELECT table1.*, table2.* 
FROM table1 
LEFT JOIN table2 ON table1.id=table2.id 
WHERE table2.surname IS NULL 
+0

Soruyla doğrudan ilgili olmayan, ancak anlamlı değerleri geri almak için, birleşimdeki 'AND' deyimine değil, bir 'WHERE' maddesini kullanmanız gerekir. Bu beni heyecanlandırıyordu. – HartleySan

4

ile deneyin: Sen yerine IS NULL kullanmak zorunda

SELECT table1.*,table2.* 
FROM table1 
    LEFT JOIN table2 ON table1.id=table2.id 
WHERE table2.surname IS NULL 
12

= NULL:

esasen bir "bilinmeyen" ve eşit veya eşit (hatta kendisi) bir şey, bu yüzden çalışmıyorum çünkü sadece = NULL yapamaz neden

nedenidir Tam bir eşleşme olması gerekiyormuş gibi bir şeyle karşılaştırırsanız, beklenen bir boole 0 veya 1 yerine NULL döndürür ve bu yüzden sorgunuz boş bir sonuç döndürüyordu.

Orada arasında açık bir fark "bilinmeyen bir" var ve "bilinmeyen eşittir". şey bilinmeyen veya bilinmiyor değildi olduğu takdirde mutlaka test edebilirsiniz, ama bir şey "eşittir" eğer test edemez bilinmeyen bilinmeyen olduğunu ve mantıklı değildir çünkü bilinmeyen. Ayrıca

, MySQL kullanıyorsanız beri, başka bir seçenek MySQL özgü BOŞ-Safe karşılaştırma operatörü olan <=>table2.surname <=> NULL kullanıyorum ancak kullanan ve sadece standart bir SQL yolu ile sopa değil çalışmak olacaktı (IS NULL/IS NOT NULL)

1

MySQL specification'a göre "= NULL" yerine "IS NULL" kullanmalısınız. "(NULL = NULL), NULL" a eşittir "diyor. Ama NULL, Boole olarak kullanılırken False'ye eşittir.