SELECT *
FROM database1.orders
WHERE number LIKE "111"
UNION ALL
SELECT *
FROM database2.orders
WHERE number LIKE "111"
但是我收到了错误:
使用的SELECT语句具有不同的列数
因为运行SELECT * FROM database2.orders WHERE number LIKE "111"
给我一个结果为空。
我需要选择所有列,并且列数太多,因为我需要计算分页和显示数据吗?
如何将其与查询合并,因为查询可帮助我处理分页
感谢帮助!
答案 0 :(得分:1)
UNION
操作需要在两个联合查询上相同数量的列,此列必须属于同一类型。您得到的错误是因为这两个不同数据库上的表顺序具有不同的列数。
为了实现您想要的目标,您必须从database1中的order
表中指定所有列,确保database2上的order
表具有相同的列。
有些像你这样的情况,这些表不匹配,所以你必须“创建”和匹配的虚拟列。像这样:
将您的database1.orders
称为A,B,C列,而database2.orders
包含D,E,F,G列,查询必须为:
select A, B, C, NULL as anAlias
from database1.orders
UNION ALL
select D, E, F, G
from database2.orders
如果您的database1.orders
列数较少,那么database2.orders
就会相反。
请理解,要执行此操作,列必须是相同的类型。所以在我的例子中A匹配D,B匹配E,依此类推。 NULL值将是与G
匹配的缺失列修改强>
如果您的两个数据库订单表在每个数据库上都有相同的列,那么您的问题是因为这两个表具有不同的字段创建顺序,例如database1.orders
具有A, B, C, D
和{{1你有database2.orders
这就是你不应该将 A, C, D, B
与union子句一起使用的原因。