繁体   English   中英

选择一个只有一行且该行是特定值的ID

[英]Select an ID where there is only one row and that row is a specific value

我有这个查询。 有很多联接,因为我正在检查ID是否链接到任何这些表。

当前,此查询向我显示未链接到任何这些表的任何ID。 我想对其进行添加,以便它还显示链接到d表的所有ID,但前提是D表中只有1行并且D字段中的类型为“ member”。

SELECT 
    c.ID,
    c.location,
    c.pb,
    c.name,
    c.surname

FROM c
    LEFT JOIN l on c.rowno = l.rowno
    LEFT JOIN d on c.rowno = d.rowno
    LEFT JOIN t on c.rowno = t.rowno
    LEFT JOIN cj ON (c.rowno = cj.rowno OR c.rowno = cj.rowno2)
    LEFT JOIN dj ON c.rowno = d.rowno
    LEFT JOIN lg ON c.rowno = lg.rowno
    LEFT JOIN tj ON c.rowno = tj.rowno

WHERE
    c.status != 'closed'
    AND l.rowno IS NULL
    AND d.rowno IS NULL
    AND t.rowno IS NULL
    AND cj.rowno IS NULL
    AND dj.rowno IS NULL
    AND lg.rowno IS NULL
    AND tj.rowno IS NULL

我首先想到的是添加

WHERE D.type = 'member'

但这给了我所有具有行D.type = member的ID(它们可能有10行具有所有不同的类型,但是只要其中1个具有type = member就会显示出来)。 我想看到只有d.type = member的ID

很抱歉,如果我的措辞不好,我很难直截了当地说这句话。 任何帮助表示赞赏!

D表上的条件外,我将对所有条件都使用exists

SELECT c.*
FROM c JOIN
     (SELECT d.rownum, COUNT(*) as cnt,
             SUM(CASE WHEN d.type = 'Member' THEN 1 ELSE 0 END)  as num_members
      FROM t
      GROUP BY d.rownum
     ) d
     ON c.rownum = d.rownum
WHERE c.status <> 'closed' AND          
      NOT EXISTS (SELECT 1 FROM t WHERE c.rowno = t.rowno) AND
      NOT EXISTS (SELECT 1 FROM l WHERE c.rowno = l.rowno) AND
      . . . 

我发现NOT EXISTS在逻辑上更容易遵循。 我认为SQL Server中的两种方法之间没有很大的性能差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM