sql-server - 选择在一个字段上有一个值并且在另一个字段的两个值之间的行
问题描述
我无法使用 SELECT 并寻求帮助 :)
我需要在一个字段上选择一个 ID 并在另一个字段上选择两个指定值的行,例如:
ID.......COLOR........SIZE
001......GREEN........M
001......GREEN........L
001......GREEN........XL
001......GREEN........2XL
001......GREEN........3XL
001......RED..........2XL
002......WHITE........XL
002......WHITE........2XL
002......WHITE........3XL
然后我想得到每个 ID & COLOR 在 SIZE 中都有两个值(例如 2XL 和 3XL),如下所示:
001......GREEN......2XL
001......GREEN......3XL
002......WHITE......2XL
003......WHITE......3XL
不应包含“001-RED-2XL”,因为在同一 ID 和 COLOR 行上没有“3XL”。
提前谢谢了!
甜蜜的问候:)
解决方案
这可以通过用作EXISTS
过滤条件的两个相关子查询来实现。
SELECT t.id, t.color, t.size
FROM mytable t
WHERE
t.size IN ('2XL', '3XL')
AND EXISTS (SELECT 1 FROM mytable WHERE id = t.id AND color = t.color AND size = '2XL')
AND EXISTS (SELECT 1 FROM mytable WHERE id = t.id AND color = t.color AND size = '3XL')
另一种解决方案是使用自联接:
SELECT t.id, t.color, t.size
FROM mytable t
INNER JOIN mytable t2
ON t2.id = t.id
AND t2.color = t.color
AND (
( t.size = '2XL' AND t2.size = '3XL' )
OR ( t.size = '3XL' AND t2.size = '2XL' )
)
推荐阅读
- excel - 查找直到第 1 列仅包含数字的最后一行
- java - 在 Vertx 中设置周期性不会每次都被触发
- ios - Xcode 11 iOS 游乐场不再符号链接游乐场SharedDataDirectory - 错误或功能?
- amazon-web-services - 如何手动将 dns 条目添加到 AWS ECS 服务发现管理的托管区域?
- c++ - 算术类型(在 C++ 中)被定义为迎合各种硬件的特殊性
- java - 合并两个不同的列表一个是wifi类型的另一个是蓝牙类型的
- triggers - 谷歌表格:触发器将数据放在错误的表格上
- python - 从 msvcrt.getch() 输入未按预期工作
- html - 未指定“大小”时 SRCSET 加载不正确的大小
- c# - asp DataGrid 不显示按钮行