使用的SELECT语句具有不同的列数

goo*_*ing 12 mysql sql union

例如,我不知道每个表中有多少行,我尝试这样做:

SELECT * FROM members 
UNION 
SELECT * FROM inventory
Run Code Online (Sandbox Code Playgroud)

SELECT如果不添加NULL's,我可以放到第二个而不是*来删除此错误?

Red*_*ter 9

明确列出列名而不是*,并确保列和数据类型的数量与每个选择中的同一列匹配.

更新:

我真的不认为你想根据表名来联合这些表.它们似乎不包含相关数据.如果您发布架构并描述您要实现的目标,我们可能会提供更好的帮助.


Fru*_*ner 6

你能做到的

SELECT *
from members
UNION
SELECT inventory.*, 'dummy1' AS membersCol1, 'dummy2' AS membersCol2
from inventory;
Run Code Online (Sandbox Code Playgroud)

其中membersCol1,membersCol12等等... members是不在列中的列的名称inventory.这样,联合中的两个查询都将具有相同的列(假设所有列inventory都相同,members对我来说似乎很奇怪......但是,嘿,这是你的架构).

更新:

作为HLGEM指出,这只是工作,如果inventory有相同名称的列members,并以相同的顺序.明确命名所有列是最好的想法,但由于我不知道名称,我不能完全这样做.如果我这样做,它可能看起来像这样:

SELECT id, name, member_role, member_type
from members
UNION
SELECT id, name, '(dummy for union)' AS member_role, '(dummy for union)' AS member_type
from inventory;
Run Code Online (Sandbox Code Playgroud)

我不喜欢使用NULL为虚值,因为那并不总是很清楚哪一个记录来自于联盟的一部分 - 使用"虚拟"清楚地表明该记录是来自于美国的部分不具有该记录(虽然有时这可能无关紧要).unioning这两个表的想法似乎很奇怪,因为我很怀疑他们会超过1个或2列具有相同的名称,但你问的问题在这样的,我在你的情况想象这莫名其妙的方式说得通.

  • 为什么不使用“NULL”代替“dummy1”和“dummy2”? (2认同)