如何从数据库中的两个表中获取数据?

问题描述:

你能解释一下,为什么这段代码不工作?如何从数据库中的两个表中获取数据?

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语句具有不同的列数

和我无法解决这个问题。

+1

好了,你要照顾的结果两个单个查询的集合在结构上都是相似的,因此它们可以合并为一个表。引擎还应该如何从这两套中创建一张桌子? – arkascha

+0

嗯,好吧,但我是MySQL的初学者。 – Dawid77

+0

你能告诉我一个示例代码吗? – Dawid77

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'