你能解释一下,为什么这段代码无效?
SELECT SUM(`cash`) AS `cash`,COUNT(*) AS `rows` FROM `table_1` WHERE `login` = 'test' UNION ALL SELECT COUNT(*) AS `rows2` FROM `table_2` WHERE `login` = 'test';
在phpMyadmin中,我看到了这样的消息:
1222 - 使用的SELECT语句具有不同的列数
我无法解决这个问题。
答案 0 :(得分:0)
UNION获取多个SELECT语句的结果,并将它们显示为单个结果集。但是为了做到这一点,各个SELECT语句中的列数必须相同。
要理解这一点,可能有助于格式化查询:
SELECT
SUM(`cash`) AS `cash`,
COUNT(*) AS `rows`
FROM `table_1`
WHERE `login` = 'test'
UNION ALL
SELECT
COUNT(*) AS `rows2`
FROM `table_2`
WHERE `login` = 'test'
您的第一个查询是选择两列,现金和行。第二个查询只选择一列 rows2 。另请注意,由于UNION正在连接结果,因此您也可以使用相同的名称调用每个查询中的相应列。
如果您确实没有要从第二个表中选择的任何值,则可以用缺省值替换缺省值:
SELECT
SUM(`cash`) AS `cash`,
COUNT(*) AS `rows`
FROM `table_1`
WHERE `login` = 'test'
UNION ALL
SELECT
NULL AS `cash`
COUNT(*) AS `rows`
FROM `table_2`
WHERE `login` = 'test'