簡體   English   中英

如何合並具有不同列數的兩個表?

[英]How to union two tables with different no of columns?

這是我的查詢。

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”

請幫忙。

這應該適用於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

注意:您在第二個子查詢中不需要別名,引擎從您的第一個選擇結果中獲取字段名

我為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

上面的兩個列(或更具體地說)的列數據類型具有相同的順序

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

試試看..我想我以正確的順序匹配了您的列,每個列的數量都正確...

嘗試請設置mysql變量而不是char'A'

@ var1 AS主題

代替

以“ A”為主題

暫無
暫無

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

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