如何在多列中搜索?
How to search in multiple columns?
这是我的 table:
// table
+----+------+------+
| id | col1 | col2 |
+----+------+------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 3 | 1 |
| 7 | 3 | 2 |
| 8 | 3 | 3 |
| 9 | 3 | 4 |
| 10 | 3 | 5 |
+----+------+------+
现在我想在 col1
和 col2
中搜索。像这样:
select * from table where col1,col2 IN (1,2);
我想要这个输出:
+----+------+------+
| id | col1 | col2 |
+----+------+------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 3 | 1 |
| 7 | 3 | 2 |
+----+------+------+
嗯,我的问题在这部分:... where col1,col2 IN (1,2)
。我该如何解决?
注意:我可以这样做:... where col1 IN (1,2) or ,col2 IN (1,2)
。但是这样一来,我必须在每一列上创建两个单独的索引。虽然我想要一个需要像这样的组索引的查询:KEY NameIndex (col1, col2)
你想要这个,对吗?
WHERE col1 IN (1,2)
OR col2 IN (1,2)
如果是这样,将 OR
变成 UNION
。 (这是一个常见的优化技巧。)
( SELECT ... WHERE col1 IN (1,2) )
UNION DISTINCT -- since there are likely to be dups
( SELECT ... WHERE col2 IN (1,2) );
并为每个SELECT
提供最优索引:
INDEX(col1),
INDEX(col2)
这两列的复合索引 不够。
(Appologies -- 这可能是许多杂乱无章的评论中最好的总结。)
这是我的 table:
// table
+----+------+------+
| id | col1 | col2 |
+----+------+------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 3 | 1 |
| 7 | 3 | 2 |
| 8 | 3 | 3 |
| 9 | 3 | 4 |
| 10 | 3 | 5 |
+----+------+------+
现在我想在 col1
和 col2
中搜索。像这样:
select * from table where col1,col2 IN (1,2);
我想要这个输出:
+----+------+------+
| id | col1 | col2 |
+----+------+------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 3 | 1 |
| 7 | 3 | 2 |
+----+------+------+
嗯,我的问题在这部分:... where col1,col2 IN (1,2)
。我该如何解决?
注意:我可以这样做:... where col1 IN (1,2) or ,col2 IN (1,2)
。但是这样一来,我必须在每一列上创建两个单独的索引。虽然我想要一个需要像这样的组索引的查询:KEY NameIndex (col1, col2)
你想要这个,对吗?
WHERE col1 IN (1,2)
OR col2 IN (1,2)
如果是这样,将 OR
变成 UNION
。 (这是一个常见的优化技巧。)
( SELECT ... WHERE col1 IN (1,2) )
UNION DISTINCT -- since there are likely to be dups
( SELECT ... WHERE col2 IN (1,2) );
并为每个SELECT
提供最优索引:
INDEX(col1),
INDEX(col2)
这两列的复合索引 不够。
(Appologies -- 这可能是许多杂乱无章的评论中最好的总结。)