我在下面的图片中有这个表。我尝试选择DestinationSystemID为“11”的所有行,而具有相同SupplierPartyID的其他行的DestinationSystemID不为“16”。
例如,在下表中,应选择以下行,因为它们具有DestinationSystem为11而不是16的行:
- 7300009017706
- 7300009043088
- 7330509000502
不应选择以下项,因为它同时具有DestinationSystemID 11与16:
- 7318270000006
我希望你能明白我想问你什么。
我试过搜索解决方案,但无法正确查询问题以找到解决方案。
2条答案
按热度按时间piv4azn71#
NOT EXISTS
非常适合于此:有些人会建议
NOT IN
,但我坚信这是一个劣质的解决方案,会让新用户误入歧途。Here is why you should avoid
NOT IN
,即使 * 在这个特定的例子中 * 该列 * 今天 * 不支持NULL
。读者将采用这个“有效”的解决方案,并将其应用到其他场景中,或者在列以后变成NOT NULL
时发现许多中断的查询。更详细的背景in this blog post在注解中提到。xbp102n02#
NOT IN
也 可以 将 其 作为 另 一 个 选项 使用 :中 的 每 一 个
" 小 提琴 "
NULL
值 , 请 考虑 使用NOT EXISTS
取代NOT IN
( 请 参阅 上面 的 * 接受 * 答案 ) 。