复杂加入现有查询

时间:2014-01-15 23:03:40

标签: sql sql-server tsql

我想将以下联接添加到现有查询中。我不知道逻辑是否正确。

任何帮助都将不胜感激。

  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

3 个答案:

答案 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
)