[英]How to union two tables with different no of columns?
This is my query. 这是我的查询。
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
And I m getting such error. 我得到这样的错误。 Unknown column 'A' in 'where clause'
“ where子句”中的未知列“ A”
Please help. 请帮忙。
This should work for MYSQL . 这应该适用于MYSQL 。
One of important rules in union: field counts must be equal. 联合中的重要规则之一:字段数必须相等。
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
NOTE: You don't need for aliases in your second subquery, engine takes fieldnames from your first select result 注意:您在第二个子查询中不需要别名,引擎从您的第一个选择结果中获取字段名
I ran this for MS Sql Server. 我为MS Sql Server运行了此程序。 I think one of the problems is that 'B' is being returned as book_id, which I'm guessing is an int in the first part of the union query.
我认为问题之一是'B'作为book_id返回,我猜这是联合查询的第一部分中的int。 As "TheOneWhoPrograms" mentioned columns have to be in order as well.
正如“ 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
Above has both column(or more specifically) column data types in the same order 上面的两个列(或更具体地说)的列数据类型具有相同的顺序
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
Give that a try.. I think I matched up your columns in the right order each having the right amount... 试试看..我想我以正确的顺序匹配了您的列,每个列的数量都正确...
try please set mysql variable instead of char 'A' like 尝试请设置mysql变量而不是char'A'
@var1 AS subject
@ var1 AS主题
instead of 代替
'A' as subject
以“ A”为主题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.