首页 > 解决方案 > 选择在一个字段上有一个值并且在另一个字段的两个值之间的行

问题描述

我无法使用 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”。

提前谢谢了!

甜蜜的问候:)

标签: sql-serverselect

解决方案


这可以通过用作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' )
    )

推荐阅读