当值为NULL时,SQL INNER JOIN

时间:2014-11-09 17:10:38

标签: sql join null

大家好:)我有一张桌子,其中2个字段是来自另一张桌子的FK。这些字段是idAdviceOwner和idAdviceNotifier。但是,只有其中一个具有值。我想验证它是否具有NULL值以便选择其他字段...基本上我已经完成了这个,当然没有运行但是那个想法...希望你们帮帮我。

select *from notification n
    inner join user u 
    on (n.idUserNotifier=u.idUser)
    inner join advice a on (case WHEN n.idAdviceOwner IS NOT NULL  
                           THEN n.idAdviceOwner=a.idAdvice
                           else n.idAdviceNotifier=a.idAdvice )
    where n.idUser=8

2 个答案:

答案 0 :(得分:0)

select * from notification n
    inner join user u 
    on (n.idUserNotifier=u.idUser)
    inner join advice a on case WHEN n.idAdviceOwner IS NOT NULL  
                           THEN n.idAdviceOwner else n.idAdviceNotifier END = a.idAdvice
    where n.idUser=8;

你的想法是对的,但是CASE-WHEN-ELSE-END返回一个表达式,而不是条件。这就是你收到错误的原因。

答案 1 :(得分:0)

你不会说出错误是什么,而且我没有一个方便的SQL引擎可以测试(我在路上),但我认为你在这里要做的事基本上应该工作,除了你可能需要做的事情

... on a.idAdvice = (case WHEN n.idAdviceOwner IS NOT NULL  
                           THEN n.idAdviceOwner
                           else n.idAdviceNotifier)

另一种方法是在您的查询中加入advice两次,一次使用idAdviceOwner,一次使用idAdviceNotifier,然后使用COALESCE或类似字段合并字段从两个结果。