2016-11-17 167 views
-1

你能解釋一下,爲什麼這段代碼不工作?如何從數據庫中的兩個表中獲取數據?

SELECT SUM(`cash`) AS `cash`,COUNT(*) AS `rows` FROM `table_1` WHERE `login` = 'test' UNION ALL SELECT COUNT(*) AS `rows2` FROM `table_2` WHERE `login` = 'test'; 

在phpMyAdmin我看到這條消息:

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

和我無法解決這個問題。

+1

好了,你要照顧的結果兩個單個查詢的集合在結構上都是相似的,因此它們可以合併爲一個表。引擎還應該如何從這兩套中創建一張桌子? – arkascha

+0

嗯,好吧,但我是MySQL的初學者。 – Dawid77

+0

你能告訴我一個示例代碼嗎? – Dawid77

回答

0

UNION獲取多個SELECT語句的結果並將它們顯示爲單個結果集。但爲了做到這一點,單個SELECT語句中的列數必須相同。

要理解這一點,它可以幫助格式化查詢了一下:

SELECT 
     SUM(`cash`) AS `cash`, 
     COUNT(*) AS `rows` 
    FROM `table_1` 
    WHERE `login` = 'test' 
UNION ALL 
    SELECT 
     COUNT(*) AS `rows2` 
    FROM `table_2` 
    WHERE `login` = 'test' 

你的第一個查詢選擇兩列,現金。第二個查詢只選擇一列,rows2。另請注意,由於UNION將結果連接起來,因此您可以通過相同的名稱在每個查詢中調用相應的列。

如果你真的沒有,你想從第二個表中選擇任何值,可以爲缺少的列替換默認值:

SELECT 
     SUM(`cash`) AS `cash`, 
     COUNT(*) AS `rows` 
    FROM `table_1` 
    WHERE `login` = 'test' 
UNION ALL 
    SELECT 
     NULL AS `cash` 
     COUNT(*) AS `rows` 
    FROM `table_2` 
    WHERE `login` = 'test' 
相關問題