【问题标题】:workaround for getting multiple values from subquery从子查询中获取多个值的解决方法
【发布时间】:2014-01-12 23:57:08
【问题描述】:

这是我的 sql 查询:

SELECT c.*, CAST ( 0 as int ) Score 
FROM Caregiver c JOIN Elderly e ON EXISTS 
( 
 SELECT x.LanguageID FROM 
 ( 
  SELECT 1 AS LanguageID WHERE e.Chinese = 1 UNION ALL 
  SELECT 2 AS LanguageID WHERE e.Malay = 1 UNION ALL 
  SELECT 3 AS LanguageID WHERE e.Tamil = 1 UNION ALL 
  SELECT 4 AS LanguageID WHERE e.English = 1 UNION ALL 
  SELECT 5 AS LanguageID WHERE e.Others = 1
 ) 
 x INTERSECT SELECT y.LanguageID FROM 
 ( 
  SELECT 1 AS LanguageID WHERE c.Chinese = 1 UNION ALL 
  SELECT 2 AS LanguageID WHERE c.Malay = 1 UNION ALL 
  SELECT 3 AS LanguageID WHERE c.Tamil = 1 UNION ALL 
  SELECT 4 AS LanguageID WHERE c.English = 1 UNION ALL 
  SELECT 5 AS LanguageID WHERE c.Others = 1
 ) 
 y 
) 
WHERE e.NRIC=@nric2 
AND c.CaregiverID != (SELECT CaregiverID FROM RequestPairing WHERE ReqID=@reqid2)

这不起作用,因为子查询 ( SELECT CaregiverID FROM RequestPairing WHERE ReqID=@reqid2) 返回多个值。

我的目的是利用子查询将某些行排除在主查询返回之外。

那么有什么解决方法吗?

【问题讨论】:

    标签: sql sql-server-2012 subquery


    【解决方案1】:

    我想你想要not in:

    WHERE e.NRIC=@nric2 and
          c.CaregiverID not in (SELECT CaregiverID FROM RequestPairing WHERE ReqID=@reqid2)
    

    【讨论】:

    • thx,not innot exists 都有效,但我选择 not exists,因为性能显然更好。
    【解决方案2】:

    您可以将此条件更改为NOT EXISTS

    WHERE e.NRIC=@nric2 
    AND NOT EXISTS (SELECT CaregiverID FROM RequestPairing 
    WHERE ReqID=@reqid2 AND CaregiverID = c.CaregiverID)
    

    【讨论】:

      【解决方案3】:

      是的。除了!=,您可以使用NOT IN 在选择查询周围加上括号。

      【讨论】:

        猜你喜欢
        • 2022-11-23
        • 1970-01-01
        • 1970-01-01
        • 2018-12-12
        • 2021-09-14
        • 2014-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多