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

时间:2010-09-01 20:53:11

标签: sql mysql union

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

SELECT * FROM members 
UNION 
SELECT * FROM inventory

如果不添加SELECT,我可以在第二个NULL而不是*中删除此错误?

5 个答案:

答案 0 :(得分:9)

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

<强>更新

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

答案 1 :(得分:6)

你可以做到

SELECT *
from members
UNION
SELECT inventory.*, 'dummy1' AS membersCol1, 'dummy2' AS membersCol2
from inventory;

其中membersCol1membersCol12等...是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;

我不喜欢对虚拟值使用NULL,因为它并不总是清楚记录来自哪个联合部分 - 使用'dummy'可以清楚地表明记录来自联合部分有这个记录(虽然有时这可能无关紧要)。合并这两个表的想法对我来说似乎很奇怪,因为我非常怀疑他们有超过1或2列具有相同的名称,但是你以这样的方式提出问题我想象你的方案中这个某种方式有道理。

答案 2 :(得分:2)

您确定不想加入吗?鉴于表名,UNOIN不太可能给你你想要的东西。

答案 3 :(得分:0)

  

我不知道每个表中有多少行

你确定这不是你想要的吗?

SELECT 'members' AS TableName, Count(*) AS Cnt FROM members 
UNION ALL
SELECT 'inventory', Count(*) FROM inventory

答案 4 :(得分:0)

MySQL UNION ALL运算符中的每个SELECT语句必须在具有相似数据类型的结果集中具有相同数量的字段 访问https://www.techonthenet.com/mysql/union_all.php