Concat来自不同表的两个SELECTS,具有不同的列

时间:2013-12-25 14:53:20

标签: mysql sql

我有两张桌子。

第一

payout_id
partner_id
bank_account_id
old_balance
amount
status
manager_id
comment
creation_time
update_time

第二

payment_id
advertiser_id
type
bank_account_id
amount
status
manager_id
comment
creation_time
update_time 

我最终连接了这些东西。这些表不共享任何数据。我需要按update_time对结果进行排序并应用分页。结构几乎相似,除了前两列和中间的一列,所以我只需要添加它们,留下一个相对于表格的不同空白。但查询如

SELECT payment_id FROM `advertisers`.`payments`
UNION
SELECT payout_id FROM `partners`.`payouts`

SELECT * FROM (
    SELECT payment_id FROM `advertisers`.`payments`
    UNION
    SELECT payout_id FROM `partners`.`payouts`
) t

仅显示第一个SELECT的结果。

快速的Google搜索没有帮助。它甚至可能吗?我不喜欢在代码中这样做的想法......

2 个答案:

答案 0 :(得分:2)

你需要让它们至少看起来像是有相同的列。

您可以输入默认值或调整名称......

示例(在同一列下将它们联合起来似乎是不稳定的?!)

SELECT payment_id FROM `advertisers`.`payments`
UNION
SELECT payout_id AS payment_id FROM `partners`.`payouts`

或者

SELECT payment_id, 0 AS payout_id FROM `advertisers`.`payments`
UNION
SELECT 0 AS payment_id, payout_id FROM `partners`.`payouts`

答案 1 :(得分:1)

您可以这样做:

SELECT *
FROM (
    SELECT 'payout' kind,  payout_id,  partner_id, bank_account_id, NULL,          NULL, NULL,            old_balance, amount, status, manager_id, comment, creation_time, update_time FROM `partners`.`payouts`
    UNION ALL
    SELECT 'payment' kind, payment_id, NULL,       NULL,            advertiser_id, type, bank_account_id, NULL,        amount, status, manager_id, comment, creation_time, update_time FROM `advertisers`.`payments`
) Q
ORDER BY update_time