假设我有一张包含一组不同列的表格(offcourse),
示例:
Table
id
col1 INTEGER(1), // 0 || 1
col2 // --||--
col3 // --||--
col4 // --||--
是否有可能在1个查询中选择4行,其中col1 = 1,然后选择4行,其中col2 = 1,然后选择4行,其中col3 = 1等等。我想你明白我的意思。
到目前为止,我所做的是做出4个不同的查询或进行一次查询而只做一个(col1 = 1或col2 = 1 OR ...等)。
这有效,但如果我将结果限制为16,那么我可能会得到15行col1 = 1,也许1行col2 = 1然后col3,col4 - 没有结果。
亲爱的伙计们;有没有办法在1个查询中执行此操作(我认为不是)
答案 0 :(得分:1)
我认为您正在寻找UNION ALL
构造。你可以简单地写一下
SELECT * FROM tab WHERE col1 = 1
UNION ALL
SELECT * FROM tab WHERE col2 = 2
UNION ALL
SELECT * FROM tab WHERE col3 = 3
等等。请注意一个事实,即行可能在结果中重复(如果它们满足条件中的更多条件)。
答案 1 :(得分:1)
Select * from table where col1=1 limit 4
Union
Select * from table where col2=1 limit 4
Union
Select * from table where col3=1 limit 4
Union
Select * from table where col4=1 limit 4
这将为您提供最多16个记录的结果。如果certin标准少于4个,则行数会减少。将删除重复项,导致少于16行。没有不同的行。
对于单行col1=1 and col2=1
,如果您使用union all
,则可能会返回两次,但对于大型数据集,union
只会更慢