簡體   English   中英

MYSQL 使用的 SELECT 語句有不同的列數

[英]MYSQL The used SELECT statements have a different number of columns

我需要將 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

我現在不知道怎么去......

第一個選擇是完美的,並且有效。 現在我添加了一個聯合,因為我需要添加行“日志”。 Id也在里面,但我變成了錯誤

使用的 SELECT 語句具有不同的列數

任何人都可以幫忙嗎?

每個 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

您可以在第二個SELECT為那些不在第一個中的列選擇NULL

使 UNION 的兩個操作數同構。 根據需要重命名列和/或創建 NULL 值的虛擬列,以賦予它們相同的形狀。 例如,如果我們想形成以下聯合:

SELECT  a, b, c  
FROM    table1

和:

SELECT  d, e  
FROM    table2

我們會在邏輯上將那些類型相同的列配對(在這種情況下,我們假設ae的類型相同,而bd的類型相同)並添加一個額外的 NULL 值列作為右側 SELECT 的第三個投影屬性,如下所示:

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

如果這種方法看起來令人困惑,您可以使用表視圖來簡化表達式。 在前面的示例中,您可以在 table2 上聲明一個視圖:

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

然后將您的 UNION 公式化為:

SELECT  b, a, c  
FROM    table1  
UNION  
SELECT  *  
FROM    t2view

UNION ,字段編號應該相同。 像這樣使用:

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

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

或者使用其他東西,你知道的,那是一個缺失的領域。

數據類型也應該相同。

您正在使用 MySQL 聯盟。

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 聯盟

您的第一個 select 語句有 7 列,第二個語句有 4 列。您應該在兩個語句中具有相同的列數和相同的順序。 否則顯示錯誤或錯誤數據。

你可以看到這個例子

  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 ;

運行這兩個查詢,您會看到不同之處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM