【发布时间】:2018-04-20 09:28:46
【问题描述】:
我正在尝试从表 (tblRecords) 中进行选择,并排除具有在不同表 (tblPerson) 中重复的值的行。作为一个视觉示例:
当前表格:
tblRecords: tblPerson:
+------------+-------------+ +------------+------------+
| CustomerID | OrderID | | PersonID | UserID |
+------------+-------------+ +------------+------------+
| 101 | 1 | | 8 | 3004 |
| 18 | 7 | | 5 | 81 |
| 8 | 1 | | 19 | 100 |
| 100 | 2 | | 19 | 101 |
+------------+-------------+ +------------+------------+
期望的输出:
+------------+-------------+
| CustomerID | OrderID |
+------------+-------------+
| 18 | 7 |
| 8 | 1 |
+------------+-------------+
这是一个简化的示例,因此请原谅不良表设计的迹象。由于PersonID '19' 在tblPerson 中多次出现,我想排除来自tblRecords 的所有结果,其中CustomerID 与对应于重复PersonID 的UserID 相同(因此排除100 和 101)。
我认为解决方案不是按重复值分组,而是在查询的 WHERE 子句中使用NOT EXISTS。这是我写的查询没有按预期工作:
SELECT *
FROM tblRecords
WHERE NOT EXISTS (
SELECT PersonID
FROM tblPeople
GROUP BY PersonID
HAVING COUNT(PersonID) > 1
)
我不明白如何修复查询,因此它知道要从tblRecords 中排除结果,其中CustomerID 值出现在tblPerson 中重复的PersonID 旁边。目前,子查询选择我想要排除的确切值。我只是不知道他们是如何在 CustomerID 中被搜索到的。
【问题讨论】:
-
编辑您的问题并提供示例数据和所需结果。这个问题相当荒谬,因为您似乎在描述中谈论一个表,但查询指的是两个。
-
请阅读this,了解一些改进问题的技巧。
-
@GordonLinoff 我重写了这个问题。希望它更清楚。
-
@HABO 我重写了这个问题。希望它更清楚。
标签: sql sql-server tsql exists