MYSQL使用的SELECT语句具有不同的列数

时间:2016-07-13 15:07:54

标签: mysql union

我需要将2个表格与相同的ID组合在一起,但我不能

    SELECT stat.user_id, user.username,
        SUM(stat.vertrag) AS vertrag,
        SUM(stat.zubehoer) AS zubehoer,
        SUM(stat.privat) AS privat,
        SUM(stat.service) AS service,
        SUM(stat.bs_vertrag) AS bus
            FROM statistics stat
        join users user on stat.user_id = user.uid
        WHERE stat.user_id != '0' AND stat.datum LIKE '%$month%'
        GROUP BY stat.user_id
UNION
    SELECT bew.user_id, stat.user_id, user.username,
        SUM(case when bew.log = 'inv_imei' 
                 THEN
                      1 
                 ELSE
                      0 
                 END) AS inv
        FROM user_bewegungen bew
        JOIN users user ON user.uid = bew.user_id
        JOIN statistics stat ON bew.user_id = stat.user_id
        WHERE bew.date LIKE '%$month%'
        GROUP BY bew.user_id
        ORDER BY vertrag DESC

我现在不知道怎么走.....

第一个选择是完美的,并且有效。现在我添加了一个联合因为我需要添加行" log"。 Id也在其中,但我成了错误

  

使用的SELECT语句具有不同的列数

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:2)

每个select语句需要具有相同的列数。你的第一个有7:

SELECT 
   stat.user_id, 
   user.username,
   SUM(stat.vertrag) AS vertrag,
   SUM(stat.zubehoer) AS zubehoer,
   SUM(stat.privat) AS privat,
   SUM(stat.service) AS service,
   SUM(stat.bs_vertrag) AS bus

你的第二个有4:

SELECT 
   bew.user_id, 
   stat.user_id, 
   user.username,
   SUM(case when bew.log = 'inv_imei' THEN 1 ELSE 0 END) AS inv

您可以在第二个NULL中为那些不在第一个列中的列选择SELECT

答案 1 :(得分:1)

使UNION的两个操作数同构。根据需要重命名列和/或创建NULL值虚拟列,以使它们具有相同的形状。例如,如果我们想要形成UNION:

SELECT  a, b, c  
FROM    table1

SELECT  d, e  
FROM    table2

我们会在逻辑上将那些相同类型的列配对(在这种情况下,让我们假设ae属于同一类型,而{{1} }和b属于同一类型)并添加一个额外的NULL值列作为右侧SELECT的第三个投影属性,如下所示:

d

如果这种方法看起来令人困惑,您可以使用表视图来简化表达式。在前面的示例中,您可以在table2上声明一个视图:

SELECT  b, a, c  
FROM    table1  
UNION  
SELECT  d AS b, e AS a, NULL as c  
FROM    table2

然后将您的UNION制定为:

CREATE VIEW t2view( b, a, c )  
AS  
SELECT d, e, NULL  
FROM   table2

答案 2 :(得分:0)

UNION中,字段编号应相同。使用方式如下:

SELECT stat.user_id, 0, user.username, .... 

SELECT bew.user_id, stat.user_id, user.username, ...

或使用别的东西,你知道的,那里是一个缺失的领域。

数据类型也应该相同。

答案 3 :(得分:0)

您正在使用MySQL Union。

UNION is used to combine the result from multiple SELECT statements into a single result set.

The column names from the first SELECT statement are used as the column names for the results returned. Selected columns listed in corresponding positions of each SELECT statement should have the same data type. (For example, the first column selected by the first statement should have the same type as the first column selected by the other statements.)

参考:MySQL Union

您的第一条选择语句有7列,第二条语句有4列。 在两个语句中,您应具有相同的列数和相同的顺序。 否则会显示错误或错误数据。

答案 4 :(得分:0)

您可以看到此示例

  1. 有两个查询,两个查询的列数均相同。
  2. 列名可以不同。
select 'row1' as column1,'row2' as column2
union 
select 'row3' as column11,'row4' as column222 

如果更改列数,则意味着在第一个查询中选择2列,在第二个查询中使用3列,则将出现错误(使用的SELECT语句具有不同的列数)。

select 'row1' as column1,'row2' as column2
union 
select 'row3' as column11,'row4' as column222 ,'rr' as t ;

运行两个查询,您会发现差异。