大家好:)我有一张桌子,其中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
答案 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
或类似字段合并字段从两个结果。