2017-08-02 43 views
0

我的結構解釋如下: 我有2個表,alerts_conditionsalerts_list如何顯示一個mySQL表的列,我不想有數據?

id總是在alerts_list表中找到。 因此,如果在alerts_conditions上找到id這意味着它在alerts_list中也有一行。

但是,在某些情況下,id爲alerts_conditions發現,因此在alerts_list只發現。

在這種情況下,輸出包含無關與id(實際上它需要第一alerts_conditions行的列)

我的問題是如何改變我的查詢,以便將該ID 信息alerts_list上只有alerts_conditions的列爲空/空?

在我下面的情況下,50只在alerts_list

SELECT * 
FROM alerts_conditions, 
     alerts_list 
WHERE (alerts_conditions.alerts_conditions_alert = 50 OR alerts_list.alerts_id=50) 
     AND alerts_conditions.company_id = 1 
LIMIT 1 

發現請注意:

IF在alerts_list存在的ID並不一定意味着它存在於alerts_conditions了。但是,如果在alerts_conditions上發現該ID,則它也存在於alerts_list上。

+4

提示:你需要使用一個'OUTER JOIN'。 – TheDetective

+0

@TheDetective你好,你的意思是聯盟? – EnexoOnoma

+0

@TheDetective任何可能的解決方案,因爲答案不會返回預期的結果? – EnexoOnoma

回答

0

你必須使用左連接,然後檢查這兩個條件(NULL /空)

SELECT al.* , ac.* 
FROM alerts_list al 
LEFT JOIN alerts_conditions ac 
on(al.alerts_d=ac.alerts_conditions_alert) 
WHERE 
(
    alerts_conditions.alerts_conditions_alert = 50 
    OR 
    alerts_list.alerts_id=50 
) AND 
alerts_conditions.company_id = 1 
AND 
(ac.alerts_conditions_alert IS NULL OR ac.alerts_conditions_alert= '') 
+0

記住,如果ID存在於'alerts_list'中,那麼這並不意味着它也存在於'alerts_conditions'上。但是,如果在alerts_conditions上存在id,那麼它也存在於'alerts_list'上。 – EnexoOnoma

+0

我只是指出這兩個表共同列鍵在連接條件和一個額外的地方,我試圖解決這個問題 –

+0

:'SELECT al。*,ac。* FROM alerts_list al LEFT JOIN alerts_conditions ac on (al.alerts_id = ac.alerts_conditions_alert) WHERE ( ac.alerts_conditions_alert = 50 OR al.alerts_id = 50 )AND ac.company_id = 1 AND (ac.alerts_conditions_alert IS NULL OR ac.alerts_conditions_alert = '')' – EnexoOnoma

相關問題