sql - 检索两个字段值都存在于同一个表中的记录
问题描述
我有表“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”。
解决方案
如果ReceiverNo
andPartNo
是表上的复合键(唯一标识一条记录),您可以这样做:
SELECT
ReceiverNo
FROM
ReceiverDet
WHERE
PartNo = 'CoC'
OR
PartNo = @UserInput
GROUP BY
ReceiverNo
HAVING
COUNT(DISTINCT PartNo) = 2;
推荐阅读
- flutter - 我是 Flutter 的绝对初学者,如何实现这种布局?
- reactjs - 努力在没有 web-pack 的现有 React 项目中安装 SCSS
- flutter - 它在声明变量性别时出错(颤振)
- kubernetes - 如何移除 Kubernetes 中卡住的 statefullset.apps?
- javascript - AWS Cognito adminCreateUser 导致 InvalidSignatureException
- matlab - MATLAB - 计算两个分布的重叠面积f
- visual-studio-code - 在 vscode 中生成 matplotlib 图表不起作用
- javascript - 如何根据位置选择元素?
- haskell - 尽管在编译器引用的值上使用了 realToFrac,但在输出 Int 时出现类型错误
- reactjs - how to index dynamic routes in google using nextJS