我想从一个数据库中的两个不同的表中提取一些信息, [(第一张表):id-nbrNight-348] [(第二张表):id-û]
我想从第一张表中提取nbrNight&第二个表中的id: 所以在我的情况下,我写这个,但我不知道如何在一行rassemble这两行:
SELECT sum(nbrNight) as night FROM firsttab
SELECT count(`id`) as id FROM secondtab
我认为这是两条线:
SELECT sum(nbrNight) as night,count(`id`) FROM firsttab,secondtab
但他不行!! 我需要帮助
答案 0 :(得分:1)
您可以使用UNION
来合并两个查询的结果,例如
SELECT sum(nbrNight) as night FROM firsttab
UNION
SELECT count(`id`) as id FROM secondtab
(OR)对两个表使用它们之间的公共列(如果存在)执行JOIN
,如下所示(假设id
是它们之间的公共列)
SELECT sum(t1.nbrNight) as nightsum, count(t2.`id`) as idcount
FROM firsttab t1 JOIN secondtab t2 ON t1.id = t2.id
答案 1 :(得分:0)
一种选择是将查询用作内联视图;在另一个查询中将这些查询引用为rowsource(如表)。
由于每个查询都返回一行,因此您可以安全地执行JOIN
操作,而无需任何连接谓词(又名CROSS JOIN
)。
例如:
SELECT f.night
, s.id
FROM ( SELECT SUM(nbrNight) AS night FROM firsttab ) f
CROSS
JOIN ( SELECT COUNT(id) AS id FROM secondtab ) s
另一个选项(因为两个查询都保证只返回一行,如果它们不返回错误)是将查询包含在另一个查询的SELECT列表中。没有必要在子查询中包含列别名,但我们可以指定别名。
例如:
SELECT ( SELECT SUM(nbrNight) FROM firsttab ) AS night
, ( SELECT COUNT(id) FROM secondtab ) AS id
如果其中一个查询返回多个列,则第一个示例中的方法仍然有效。内联视图查询可以返回多个表达式,我们可以在外部查询中引用这些表达式。使用第二个示例中的模式,强制规定子查询必须只返回一个表达式(一列)。
作为演示内联视图返回多个列的示例,内联视图 f
会返回三个表达式:
SELECT f.night
, f.cnt
, f.min_nbr
, s.id
FROM ( SELECT SUM(nbrNight) AS night
, COUNT(nbrNight) AS cnt
, MIN(nbrNight) AS min_nbr
FROM firsttab
) f
CROSS
JOIN ( SELECT COUNT(id) AS id FROM secondtab ) s