尝试列出表1中的所有内容以及表2中的记录
表1每行都有一个id,表2中的每一行都有idontable1
select table1.*, count(table2.idintable1)as total
from table1
left join table2 on table1.id=table2.idintable1
WHERE table1.deleted='0' AND table2.deleted=0
group by
table2.idintable1
我当前的问题是来自table1的行,而不显示table2中的0条记录 我想让它们显示
答案 0 :(得分:3)
您想要的查询是:
select t1.*, count(t2.idintable1) as total
from table1 t1 left join
table2 t2
on t1.id = t1.idintable1 and t2.deleted = 0
where t1.deleted = 0
group by t1.id;
以下是更改:
t2.deleted
上的条件已移至on
子句。否则,这会将外部联接转换为内部联接。t1.deleted
条件中的条件仍然在where
子句中,因为大概您确实希望将此作为过滤条件。group by
子句基于t1.id
,因为如果没有匹配,t2.idintable1
将为NULL
。假设t1.id
中的id
是唯一的(或主键),只需使用table1
即可。答案 1 :(得分:1)
你应该GROUP BY table1.id
。
LEFT JOIN
确保table1
中的所有行都出现在结果集中。那些table2
中没有配对的人将在字段NULL
中显示table2.idintable1
。因此,原始GROUP BY
子句为table1
中未显示在table2
中的所有行生成单行(而不是table1
的每一行中的一行)
答案 2 :(得分:0)
你已经通过支持陷阱进入了mysql的非标准组。
更改您的论坛以列出表1的所有列:
group by table1.id, table1.name, etc
或列出select:
中所有table1列的列位置group by 1, 2, 3, 4, etc
或者使用子查询来获取计数与id,并将table1连接到该。