我有两张桌子。
第一
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搜索没有帮助。它甚至可能吗?我不喜欢在代码中这样做的想法......
答案 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