【发布时间】:2015-02-25 11:14:41
【问题描述】:
我有 'foo'、'bar' 和 'buz' 的值。我想从下表中选择第 1 行和第 3 行:
+----+------+------+------+
| Id | Col1 | Col2 | Col3 |
+----+------+------+------+
| 1 | foo | | |
| 2 | foo | bar | buz |
| 3 | | bar | buz |
+----+------+------+------+
考虑到以下几点,最佳的 MySQL 查询是什么:
- 空格为空
- 我有 n 列,其中 4
- 会有几百行
- 我将在一行中选择特定的列组合,其中只能设置提供的值,其余的必须为空。例如:我需要这样的查询
SELECT * FROM my_table WHERE Col1 = foo OR (Col2 = bar AND Col3 = buz);
这将只返回第 1 行和第 3 行。
换句话说,我希望有一个查询只返回具有某些值组合的行,而不是 coln = 'some_val' 并且我们不关心其他行的行。
这样做的原因是我想在 1 个查询中有 5 个组合,并且我想避免在任何地方写 (...) coln <> NULL(...)。
非常感谢您的建议。
【问题讨论】:
-
您希望有一个查询返回一条记录,该记录在 col1、col2、col3 三列之一中至少有一个条目?
-
你能再解释一下你的最后一个要点吗?
-
@blckbird,克里斯:我已经编辑了我的问题
-
你能再举几个例子吗?特别是,如果有的话,您希望返回以下行中的哪一行:
(4, foo, bar, NULL)、(5, xyzzy, NULL, NULL)、(6, bar, NULL, NULL)、(7, NULL, NULL, NULL)? -
@Ilmari Karonen 我希望数据库假设,对于查询中未提供的每个字段,它需要为 NULL 才能返回整行。即使提供的值匹配。
标签: mysql