2015-10-07 58 views
1

联接所以我有一个加入了e.g让说我需要有OR条件

SELECT a.id FROM tableA as a 
    JOIN tableB as b on a.id=b.aid 
    JOIN tableC as c on (c.aid != a.id or ???) and a.name = 'fedex' and b.user = 'employee' and c.enabled=true 

???是,如果C不包含a.id我仍希望该结果包含结果

我想左外连接,但没有这样的伎俩

顺便说一句,即使我有一个单记录在表c中,然后这个查询工作正常。如果表c为查询失败时为空。

+0

你有没有考虑过'RIGHT JOIN'? – CollinD

+0

这不就是'LEFT JOIN'吗?或者'LEFT OUTER JOIN'是同样的东西? –

+0

@RocketHazmat在这种情况下它几乎是一样的。我也尝试了他们两个。 –

回答

1

您正在描述什么是LEFT JOIN。那么,你试过这个吗?

SELECT a.id 
FROM tableA a JOIN 
    tableB b 
    on a.id = b.id LEFT JOIN 
    tableC c 
    on c.id = a.id; 

当然,你的查询是如此简单,你甚至不似乎需要TableC。这将返回的a.id同一组:

SELECT a.id 
FROM tableA a 
WHERE a.id IN (SELECT b.ID FROM tableB b) 

唯一的区别是,你的版本可能会产生重复。

+0

我试过了,它在表c中有数据时工作正常,否则没有任何返回。 –

+0

即,当tableC为空时,它不返回任何行 –

+0

即使当“tableC”为空时,第一个查询也应该返回行。还有其他一些事情正在发生,比如你在问题中没有包括“where”条款。 –

0
SELECT a.id FROM tableA as a 
JOIN tableB as b on a.id = b.aid and b.user = 'employee' 
LEFT JOIN tableC as c on c.aid != a.id and a.name = 'fedex' and c.enabled=true