【发布时间】:2015-06-10 17:08:07
【问题描述】:
我有两张表 tablea 和 tableb 如下所示;
表格
+--------+-------+-------+-------+------+
| fa | fb | fc | fd | fe |
+--------+-------+-------+-------+------+
| col1 | f11 | f12 | f13 | x1 |
+--------+-------+-------+-------+------+
| col2 | f21 | f22 | f23 | x2 |
+--------+-------+-------+-------+------+
| col3 | f31 | f32 | f33 | x3 |
+--------+-------+-------+-------+------+
| col4 | f41 | f42 | f43 | x4 |
+--------+-------+-------+-------+------+
表格b
+--------+-------+-------+------+------+
| tbba | tbbb | tbbc | tbbd | tbbe |
+--------+-------+-------+------+------+
| cola | fa1 | fa2 | 0 | x1 |
+--------+-------+-------+------+------+
| colb | fb1 | fb2 | 0 | x1 |
+--------+-------+-------+------+------+
| colc | fc1 | fc2 | 1 | x1 |
+--------+-------+-------+------+------+
| cold | fd1 | fd2 | 1 | x2 |
+--------+-------+-------+------+------+
| cole | fe1 | fe2 | 1 | x2 |
+--------+-------+-------+------+------+
| colf | ff1 | ff2 | 0 | x3 |
+--------+-------+-------+------+------+
| colg | fg1 | fg2 | 1 | x3 |
+--------+-------+-------+------+------+
| colh | fh1 | fh2 | 1 | x3 |
+--------+-------+-------+------+------+
| coli | fi1 | fi2 | 0 | x3 |
+--------+-------+-------+------+------+
| colj | fj1 | fj2 | 0 | x4 |
+--------+-------+-------+------+------+
我想生成一个类似的表格;
+--------+-------+-----+
| col1 | f11 | 1 |
+--------+-------+-----+
| col2 | f21 | 2 |
+--------+-------+-----+
| col3 | f31 | 2 |
+--------+-------+-----+
| col4 | f41 | 0 |
+--------+-------+-----+
这是 tableb tableb.tbbe 中 tablea tablea.fe 中的外键数,tableb.tbbd 字段的值 1。我有一个类似的查询;
SELECT a.fa , a.fb , COUNT( b.tbbe)
FROM tablea a
LEFT JOIN tableb b ON a.fe = b.tbbe
GROUP BY a.fa
但这会计算所有外键而不检查tableb.tbbd 字段的状态。如何创建此表?
你可以在这里参考我的另一个问题Efficient way to calculate number of foreign keys in second table and display it with rows from first table - PHP - MySQL
谢谢。
【问题讨论】:
-
这对我来说不是很清楚,我看不出你从哪里得到你的计数。 (col1, f11) 你是怎么得到 1 的?
-
col1和f11是来自 tablea 的字段fa和fb的值。1表示,外键x1在tableb中出现了3次,但是当我们考虑tableb.tbbd字段时,它变成1,因为在三行中有两行,tbbd字段为0。 -
好的,感谢您解决这个问题。我已经给出了答案和 SQL Fiddle 示例。