2

有一个包含 2 列的表:

x    y
1    1
1    2
1    3
2    2
2    3
2    4
3    1
3    2
3    5

如果我需要找到所有 X,其中 Y = 5。我使用查询

SELECT * FROM table WHERE y = 5

但是,我需要找到所有 X,其中 Y = 2 AND Y = 3。

如何在 1 个查询中执行此操作?

结果我必须得到 X = 1 和 2(不是 3!)。Y 可能很多

If i use SELECT * FROM table WHERE y IN (1, 2)

我会得到 x = 1, 2, 3,但我不需要 Y = 3,因为在表中没有行 x=3, y=3

4

3 回答 3

2
SELECT   x
FROM     tableName
WHERE    y IN (2,3)
GROUP BY X
HAVING COUNT(*) = 2

如果没有为每个 x 指定唯一约束,则DISTINCT必须

SELECT   x
FROM     tableName
WHERE    y IN (2,3)
GROUP BY X
HAVING COUNT(DISTINCT y) = 2
于 2012-11-28T06:50:46.517 回答
1

试试这个:

SELECT * FROM TABLE b WHERE Y = 2 AND EXISTS (SELECT * FROM TABLE WHERE b.X = X AND Y = 3);
于 2012-11-28T06:48:47.587 回答
-1

您需要使用OR在您的WHERE子句中创建一个布尔表达式

SELECT * FROM table WHERE (y = 2) OR (y = 3);

如果由于许多y值而变得乏味,则使用IN

SELECT * FROM table WHERE y IN (2,3);
于 2012-11-28T06:50:28.587 回答