2013-01-18 108 views
0

我試圖做2個查詢與不同的列1與2的基本不同的表。我試過這樣:mysql查詢2個不同列的表?

SELECT * FROM $TIMES_TABLE WHERE uid='$contextUser' AND submitstatus=1 UNION SELECT first_name, last_name, employid, manager FROM $USER_TABLE WHERE username='$contextUser' 

,但我得到這個錯誤:

Can't perform query: The used SELECT statements have a different number of columns 

我不理解。能有人幫

感謝

回答

0

的查詢返回一個結果,這是由在結果列的每列中的數據類型的數量和「定義」。

UNION或UNION ALL操作旨在將兩個結果集「附加」在一起;並且爲了做到這一點,來自兩個查詢的結果集必須在返回的列數方面相同,並且每列的數據類型也必須相同。

有時,當結果集是關閉的只是一點點,我們就可以矇混過關查詢了一下,使結果集匹配(添加一些文字作爲列的佔位符)

SELECT 'u'     AS source 
    , u.first_name  AS first_name 
    , u.last_name   AS last_name 
    , u.employid   AS employid 
    , u.manager   AS manager 
    FROM $USER_TABLE u 
WHERE u.username='$contextUser' 
UNION ALL 
SELECT 't'     AS source 
    , t.some_string  AS first_name 
    , t.some_otherstring AS last_name 
    , 0     AS employid 
    , 0     AS manager 
    FROM $TIMES_TABLE t 
WHERE t.uid='$contextUser' 
    AND t.submitstatus=1 

注意,姓名列(或分配給列或表達式的別名)並不重要;這裏重要的是,這兩個查詢返回五列,每列位置相匹配的數據類型:VARCHAR,VARCHAR,VARCHAR,INT,INT


當開發一個SQL語句,它定義什麼結果集將會是非常重要的被退回。多少列,以及每列的數據類型。

在開發使用「UNION」或「UNION ALL」操作的查詢時,每個查詢的結果集必須匹配。

0

在查詢結果中的所有行必須具有相同的列。由於這兩個查詢不具有相同的列,因此不能像這樣使用UNION進行組合。

你需要做這兩個單獨的查詢。