MySQL通过外部参照表选择并获取另一个表的行数

MySQL通过外部参照表选择并获取另一个表的行数,mysql,Mysql,关于标题,我很抱歉。我不知道如何恰当地描述这个问题 我有四个表,表A、B、X和D。A和B有多对多关系,所以我使用X作为链接表 结构如下: 假设我只有一个与表a中的一行对应的ID,我想选择表B中与该ID匹配的行加上表D中具有相同B_ID的所有行的计数。呃,我不擅长用文字解释 这是我想要的,我需要搜索的是一个ID,它对应于表a中的一行——假设我有一个a: ------------------------------------------------------------- | b.id | (A

关于标题,我很抱歉。我不知道如何恰当地描述这个问题

我有四个表,表A、B、X和D。A和B有多对多关系,所以我使用X作为链接表

结构如下:

假设我只有一个与表a中的一行对应的ID,我想选择表B中与该ID匹配的行加上表D中具有相同B_ID的所有行的计数。呃,我不擅长用文字解释

这是我想要的,我需要搜索的是一个ID,它对应于表a中的一行——假设我有一个a:

-------------------------------------------------------------
| b.id | (A COUNT of how many rows in D have a b_id = b.id) |
-------------------------------------------------------------
|  1   |                       20                           |
-------------------------------------------------------------
|  4   |                       12                           |
-------------------------------------------------------------
因此,根据上述结果,这个特殊的A有两个B。其中一个基站有20个Ds,另一个基站有12个Ds

我如何编写一个查询来提供我想要的结果呢?再次,我搜索的只是表a中的一个ID?

试试看

SELECT A.id, B.id, COUNT(B.id) AS cnt
FROM A
INNER JOIN X ON A.id = X.a_id
INNER JOIN B ON X.b_id= B.id
INNER JOIN D ON B.id = D.b_id
GROUP BY B.id
试试这个:

SELECT b.id, COUNT(1)
  FROM a,x, b,c
    WHERE a.id = <YOUR_ID_FOR_A>
     AND a.id = x.id 
     AND  x.b_id = b.id
     AND b.id = d,b_id
     GROUP BY b.id
如果表x具有必须存在于表b中的b_id项,则您可以通过传递一个联接并使用以下查询:

SELECT b.id, COUNT(1)
  FROM a,x,c
    WHERE a.id = <YOUR_ID_FOR_A>
     AND a.id = x.id 
     AND  x.b_id = d,b_id
     GROUP BY b.id

编辑:更正了输入错误,已更改。到,作为列分隔符。

谢谢。似乎是个错误:1064-您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以了解在第1行的“a,x,c中的COUNT1,其中a.id=1”附近使用的正确语法。这是一个错误修复。还请注意,我留下来作为您想要通过的id的空白填充。谢谢!它现在似乎起作用了。我不得不做一些修改,从a,x,c改为a,b,x,d,a.id=x.id改为a.id=x.a_id,并用句号替换第5行的逗号。