2011-07-29 50 views
3

我有两个表具有相同的主键,但一个比另一个大得多。我想知道哪个id在较小的表中有一行。 (在这个例子中,a很大,而b很小)。现在,我使用带CASE的OUTER JOIN来确定b值是否为NULL。它不工作(总是得到1)。解决这个问题很好,但有一个更好的方法。我应该怎么做?mysql外部连接 - 确定连接的行是否存在

SELECT a.id, 
     CASE b.id 
     WHEN NULL THEN 0 
     ELSE 1 
     END AS exists 
FROM a LEFT OUTER JOIN b 
    ON a.id=b.id; 

回答

6

这有你什么表现出相同的逻辑,但有一个较短的代码:

SELECT a.id,NOT ISNULL(b.id) AS exists 
FROM a LEFT OUTER JOIN b 
    ON a.id=b.id; 
3

号检查外键列(S)一NULL正是你是如何做到这一点。

然而,没有什么等于NULL(这不是一个值),这就是为什么你的CASE转到ELSE部分。您需要使用IS NULL来检查列是否为NULL

CASE WHEN b.id IS NULL THEN ...