2014-07-09 122 views
0

這是我的查詢。如何將不同列數的兩個表結合在一起?

select id,sender_id,receiver_id,date_added,subject,book_id,message from trading_message where (receiver_id=1132 or receiver_id=66) and (sender_id=1132 or sender_id=66) 
union 
select id,sender_id,receiver_id,date_added,message,'A' as subject,'B' as book_id from personal_message where (receiver_id=1132 or receiver_id=66) and (sender_id=1132 or sender_id=66) order by date_added asc 

而我得到這樣的錯誤。 'where子句'中的未知列'A'

請幫忙。

+2

不應選擇..「A」作爲主題是選擇列的數據類型..受試者「A」? – cerkiewny

+1

另一個需要注意的是你的工會需要有相同順序的項目......它不夠聰明,無法匹配列名,它只是看着值和類型。 – TheOneWhoPrograms

+0

是這個mysql嗎? –

回答

-1

試請將mysql的變量,而不是字符 'A' 像

@ VAR1爲主體

,而不是

'A' 爲主題

0
select id,sender_id,receiver_id,date_added,subject,book_id,message from trading_message where (receiver_id=1132 or receiver_id=66) and (sender_id=1132 or sender_id=66) 
union 
select id,sender_id,receiver_id,date_added,'A', 'B', null from personal_message where (receiver_id=1132 or receiver_id=66) and (sender_id=1132 or sender_id=66) order by date_added asc 

試試看..我想我按照正確的順序匹配你的列,每列都有適量......

1

這應該適用於MYSQL

聯合中的重要規則之一:字段數必須相等。

select id,sender_id,receiver_id,date_added,message, subject,book_id, from trading_message where (receiver_id=1132 or receiver_id=66) and (sender_id=1132 or sender_id=66) 
union 
select id,sender_id,receiver_id,date_added,message,'','' from personal_message where (receiver_id=1132 or receiver_id=66) and (sender_id=1132 or sender_id=66) order by date_added asc 

注意:您不需要在你的第二子查詢的別名,發動機需要的字段名從你的第一選擇結果

+0

嘿在你的查詢中有逗號問題,甚至在糾正它與空白一起工作之後會出現問題。它只在本地運行,但是在腳本中它會給出錯誤,如: 你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在第1行 – user3740116

1

我跑這對MS SQL Server中。我認爲其中一個問題是'B'被返回爲book_id,我在猜測是聯合查詢的第一部分中的一個int。正如「TheOneWhoPrograms」中提到的那樣,列也必須按順序排列。

Create Table dbo.trading_message 
(
id int 
,sender_id int 
,receiver_id int 
,date_added datetime 
,subject varchar(100) 
,book_id int 
,message varchar(1000) 
) 

Create Table dbo.personal_message 
(
id int 
,sender_id int 
,receiver_id int 
,date_added datetime 
,message varchar(1000) 
) 

select 
id 
,sender_id 
,receiver_id 
,date_added 
,subject 
,book_id -- <- I *guessing* this is an int 
,message 
from trading_message 
where (receiver_id=1132 or receiver_id=66) 
and (sender_id=1132 or sender_id=66) 

union 

select 
id 
,sender_id 
,receiver_id 
,date_added 
,'A' as subject 
,0 as book_id -- <- Changed this from 'B' to zero 
,message 
from personal_message 
where (receiver_id=1132 or receiver_id=66) 
and (sender_id=1132 or sender_id=66) 

order by date_added asc 

上面有兩列(或更具體地)以相同的順序

+0

+1附近使用正確的語法,只是爲了盡力完成這項工作,儘管它絕對不是必需的。 – TheOneWhoPrograms

+0

嘿,非常感謝您的回覆和努力。是的,我得到的數據,但它仍然是不正確的。它是給重複的數據。我猜這是因爲身份證。 – user3740116

相關問題