首页 > 解决方案 > 检索两个字段值都存在于同一个表中的记录

问题描述

我有表“ReceiverDet”,列名“ReceiverNo”和“PartNo”。我想检索“PartNo”等于“CoC”和用户输入值(即“44661”)的所有记录。然后我只想检索包含具有相同“ReceiverNo”的“PartNo”值的记录。

我已经尝试过 UNION、JOIN 和 CTE,但都无法正常工作,但我很确定 CTE 就是答案。

ReceiverDet 表

+------------+--------+
| ReceiverNo | PartNo |
+------------+--------+
| 1001       | 9173   |
+------------+--------+
| 1002       | CoC    |
+------------+--------+
| 1003       | 5432   |
+------------+--------+
| 1003       | CoC    |
+------------+--------+
| 1002       | 44661  |
+------------+--------+

对于这个例子,我希望我的最终结果是 ReceiverNo “1002”,因为它同时包含“CoC”和用户输入的值“44661”。

标签: sqljoinunioncommon-table-expression

解决方案


如果ReceiverNoandPartNo是表上的复合键(唯一标识一条记录),您可以这样做:

SELECT
  ReceiverNo
FROM
  ReceiverDet
WHERE
  PartNo = 'CoC'
  OR
  PartNo = @UserInput
GROUP BY
  ReceiverNo
HAVING
  COUNT(DISTINCT PartNo) = 2;

推荐阅读