查找相关行相同的行

时间:2019-02-27 01:40:44

标签: sql sql-server

我想查找零件ID中的行,即列名PID,其中供应商ID即S_ID与该零件ID相同。

+----+-----+
|PID | SID |
+----+-----+
| 11 |  31 |
| 12 |  35 |
| 11 |  32 |
| 11 |  35 |
| 13 |  34 |
+----+-----+

我期望结果如下:

+----+-----+
|PID | SID |
+----+-----+
| 11 |  31 |
| 11 |  32 |
| 11 |  35 |
+----+-----+

我尝试按以下方式运行查询,但得到一个空表。

SELECT S_ID FROM P_CATALOG
GROUP BY PID, S_ID
HAVING COUNT(S_ID)>1

我该怎么办?

2 个答案:

答案 0 :(得分:0)

这是建立查询的两个步骤。

1)查找具有多于一行的所有PID

SELECT PID
FROM P_CATALOG
GROUP BY PID
HAVING COUNT(*) > 1

2)返回具有找到的PID的表中的原始行:

SELECT PID, SID
FROM P_CATALOG
WHERE
    PID IN 
    (
        SELECT PID
        FROM P_CATALOG
        GROUP BY PID
        HAVING COUNT(*) > 1
    )
;

答案 1 :(得分:0)

根据示例结果,您似乎希望PID个具有多个SIDEXISTS是执行此操作的简单方法:

select c.*
from p_catalog c
where exists (select 1 
              from p_catalog c2
               where c2.pid = c.pid and c2.sid <> c.sid
             );

这并不是您要问的,但这是对您提供的数据的最明智的解释。