2016-04-06 35 views
0

ile satırları görmezden geliyor. MySQL'te birden fazla tabloya katılıyorum. Bu benim gerektiren verilerin bulunduğu bir tablo üretiyorMySQL Join, null e-posta sütunu değeri

SELECT 
    CONCAT(c.first_name, ' ', c.last_name) as name, 
    c.title, 
    c.department, 
    CONCAT(c2.first_name, ' ', c2.last_name) as reports_to, 
    c.phone_work, 
    c.phone_mobile, 
    e.email_address 
FROM 
    email_addresses e, 
    email_addr_bean_rel eb, 
    contacts c 
LEFT JOIN 
    contacts c2 ON c.reports_to_id = c2.id 
WHERE 
    c.id = eb.bean_id and 
    e.id = eb.email_address_id; 

, tek sorun bu kişilerin tam listesini içermez: Ben şu sorguyu yazmak başarmış. Irtibatların bir sayımı yaptığım zaman, ancak yukarıdaki sorgu ile 130 vardır. Sonuçlar 86'ya düşürülmüştür. Bazı araştırmalardan sonra bunun, göz ardı edilen bir e-posta adresine sahip olmayan kişilere doğru olduğunu keşfettim. Bunu istemiyorum ama null bir girişi varsa göz ardı edilmelerini nasıl durduracağından emin değilim.

email_addresses tablo kullanılarak email_addr_bean_rel bir arama yapılması gereken bir contact için email address almak için ancak e-posta adresini içerir contactsid ilk

cevap

1
SELECT CONCAT_WS(' ',c.first_name,c.last_name) name 
    , c.title 
    , c.department 
    , CONCAT_WS(' ',c2.first_name,c2.last_name) reports_to 
    , c.phone_work 
    , c.phone_mobile 
    , e.email_address 
    FROM contacts c 
    LEFT 
    JOIN email_addr_bean_rel eb 
    ON eb.bean_id = c.id 
    LEFT 
    JOIN email_addresses e 
    ON e.id = eb.email_address_id 
    LEFT 
    JOIN contacts c2 
    ON c2.id = c.reports_to_id 
+0

Bu çok daha iyi görünüyor ancak sayım yaptığımda, kişi tablosunun sahip olduğu dört ekstra giriş var. Bunun neden olabileceği hakkında bir fikrin var mı? – algorhythm

+1

Belki bir irtibatta birden fazla e-posta adresi var – Strawberry

+0

Yep, 4 duplicate. teşekkür ederim – algorhythm

1

Ben senin sorunun tablolar sırası olduğunu düşünüyorum birleşme. Yani, örneğin, tüm kişileri e-posta ile veya e-posta olmadan listelemek istiyorsanız, ilk tablonuzun kişi olması gerekir. Bu nedenle, JaydipJ'den sorguyu küçük bir değişiklikle kullanırdım: