SQL - MYSQL一个查询接收不同列值的设置限制

时间:2017-09-11 20:57:39

标签: mysql sql

假设我有一张包含一组不同列的表格(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个查询中执行此操作(我认为不是)

2 个答案:

答案 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只会更慢