向result添加一列,这是另一个具有依赖关系的SELECT

时间:2014-01-13 13:00:29

标签: mysql sql

这个有点棘手,至少我要解释一下,所以请不要生气,如果你不明白 - 这很可能是由于我的解释不好造成的。

我想从我的主SELECT中再获取一列,它将代表另一个表中的行数,适合主记录的id。

所以,想象一下我选择的主表。我将其称为 main

我想从主要中选择,主要是:

SELECT * FROM main ORDER BY c1 ASC LIMIT 5

另外,我需要为返回的每一行添加一个额外的列,它表示来自 side 表的行数,与id匹配:

SELECT COUNT(*) FROM side WHERE m_id = main_id

也许一个例子会告诉你更多

      id   data1   data2           id   m_id   ...
main ----|-------|-------   side -----|------|-----
       1     aa     ab              1     1     
       2     xx     yy              2     2
       3     az     bz              3     1
                                    4     1
                                    5     3
                                    6     2
                                    7     1
                                    8     1
                                    9     2

expected result:
 id   data1   data2    num
----|-------|-------|------
  1     aa      ab      5
  2     xx      yy      3
  3     az      bz      1

2 个答案:

答案 0 :(得分:2)

添加计数的一种简单方法是使用相关子查询:

SELECT m.*,
       (select count(*) from side s where s.m_id = m.main_id) as side_cnt
FROM main m
ORDER BY c1 ASC
LIMIT 5;

您也可以通过更改from子句来执行此操作。但是,此方法仅影响查询的select部分。

答案 1 :(得分:0)

您应该可以将其作为子查询来执行:

SELECT m.*, ( SELECT COUNT(*) FROM side WHERE m_id = m.main_id ) as num FROM main m ORDER BY c1 ASC LIMIT 5

这基本上为每个结果运行一个特殊查询,计算匹配结果的数量并将其显示在“num”列中。