我想将以下联接添加到现有查询中。我不知道逻辑是否正确。
任何帮助都将不胜感激。
LEFT OUTER JOIN
dbo.note not
CASE
WHEN not.main_ref_type='M'
THEN pem.membership_id=not.main_ref_id
WHEN not.main_ref_type=P'
THEN per.person_id=not.main_ref_id
END
答案 0 :(得分:2)
您需要on
条款。看起来应该更像这样:
LEFT OUTER JOIN
dbo.note not
on (not.main_ref_type='M' and not.main_ref_id = pem.membership_id) or
(not.main_ref_type='P' and per.person_id=not.main_ref_id)
您应该知道join
条件or
经常表现不佳。在许多情况下,最好做两个单独的连接(到note
表),然后使用select
中的逻辑(通常为coalesce()
)来获得正确的值。
答案 1 :(得分:0)
试试这个
LEFT OUTER JOIN dbo.note nt ON (nt.main_ref_type='M'
AND pem.membership_id=nt.main_ref_id)
OR
(nt.main_ref_type='P'
AND per.person_id=nt.main_ref_id)
END
答案 2 :(得分:0)
CROSS APPLY (
VALUES
('M' , pem.membership_id),
('P' , per.person_id )
) map(ref_type, ref_id )
LEFT OUTER JOIN dbo.note not ON (
not.main_ref_type = map.ref_type AND
not.main_ref_id = map.ref_id
)