簡體   English   中英

MySQL與另一個表中的ON條件

[英]MySQL with ON condition from another table

讓我們說我有:

SELECT * FROM a
LEFT OUTER JOIN b ON b.a_id = a.id
LEFT OUTER JOIN c ON b.c_id = c.id

現在我想要做的是選擇分配給c的b,例如有效(c.active = 1)。 我怎么能用ON做到這一點?

請注意,我不能在上面的整個查詢之后使用WHERE,因為即使找到0 b,我也想要返回。

你嘗試過這樣的事嗎?

SELECT * FROM LEFT OUTER JOIN b ON b.a_id = a.id AND c.active =“1”LEFT OUTER JOIN c ON b.c_id = c.id AND c.active =“1”

為了確保,我理解了這個問題:你想要所有行,其中c.active等於1或者b或c中沒有條目,對吧?

它有點冗長,但這似乎有效:

SELECT * FROM a 
LEFT OUTER JOIN b ON a.aid = b.aid 
LEFT OUTER JOIN c ON b.bid = c.bid 
WHERE a.aid NOT IN (
    SELECT a.aid FROM a 
    INNER JOIN b ON a.aid = b.aid 
    INNER JOIN c ON b.bid = c.bid 
    WHERE NOT c.active
);

我還可以想象使用UNION的解決方案

在每種情況下返回哪些行...請注意,一種情況不同:
FROM b JOIN c ON ... AND c.active=1 - 兩個表中的行都存在並處於活動狀態
FROM b JOIN c ON ... WHERE c.active=1 - 同上
FROM b LEFT JOIN c ON ... WHERE c.active=1 - 同上
FROM b LEFT JOIN c ON ... AND c.active=1 - 全部為b,但是非活動/缺失c的NULL
(警告:我不確定我的案例是否正確;請記住,ON和WHERE 並不總是可以互換的。)

混合JOIN和LEFT JOIN時,您可能需要添加括號:
FROM a JOIN ( b LEFT JOIN c ON... ) ON ... WHERE ...
FROM ( a JOIN b ON ... ) LEFT JOIN c ON... WHERE ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM