mysql从两个表中获取信息

时间:2014-07-12 00:02:10

标签: mysql mysqli

我想从一个数据库中的两个不同的表中提取一些信息, [(第一张表):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

但他不行!! 我需要帮助

2 个答案:

答案 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