【问题标题】:Search many props in mysql table在mysql表中搜索许多道具
【发布时间】:2012-11-15 23:11:07
【问题描述】:

有一个有 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

【问题讨论】:

  • 现在试试我的答案,因为如果你再添加一个 X=3 和 Y = 3 的 eow,@KuyaJohn 的答案会给出错误的结果
  • @SaharshShah 我的回答有什么问题?看到这个。 sqlfiddle.com/#!2/75e8b/1
  • 对不起@KuyaJohn 我明白了你的逻辑,你的答案是完美的。我理解错了

标签: mysql sql select where


【解决方案1】:
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

【讨论】:

  • 谢谢你,我需要它的中继!
【解决方案2】:

试试这个:

SELECT * FROM TABLE b WHERE Y = 2 AND EXISTS (SELECT * FROM TABLE WHERE b.X = X AND Y = 3);

【讨论】:

  • 不,我需要 X,其中 Y = 2 AND 3,按照你的方式,y = 2 OR 3
  • 然后简单地把 and 放在查询之间。 SELECT * FROM table WHERE y = 2 and y = 3
  • @SaharshShah 如果使用AND,它将返回零结果。
【解决方案3】:

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

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

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

SELECT * FROM table WHERE y IN (2,3);

【讨论】:

  • 不,如果 Y 匹配到 2 或 3,这将得到所有 X。你尝试过吗?
  • 我不需要 OR,我需要 AND
  • 这不可能,玛丽。条件y=2 AND y=3 不可能为真。 IN 只是 OR 条件列表的缩短版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多