MySQL与另一个表中的ON条件

时间:2015-03-06 12:32:25

标签: mysql

让我们说我有:

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

现在我要做的是选择分配给c的e,即e。 G。有效(c.active = 1)。我怎么能用ON做到这一点?

请注意,在上面的整个查询之后我无法使用WHERE,因为即使找到0 b,我也希望返回。

3 个答案:

答案 0 :(得分:0)

你试过这样的事吗?

SELECT * FROM a 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”

答案 1 :(得分:0)

为了确保,我理解了这个问题:你想要所有行,其中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

的解决方案

答案 2 :(得分:0)

每种情况下返回哪些行...请注意,一种情况不同:
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 ...