我想查找零件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
我该怎么办?
答案 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
个具有多个SID
。 EXISTS
是执行此操作的简单方法:
select c.*
from p_catalog c
where exists (select 1
from p_catalog c2
where c2.pid = c.pid and c2.sid <> c.sid
);
这并不是您要问的,但这是对您提供的数据的最明智的解释。