Mysql SQL-使用条件从表(左联接)中获取计数

Mysql SQL-使用条件从表(左联接)中获取计数,mysql,sql,Mysql,Sql,您好,我有以下树表,我想实现名为“想要的结果”的表。 第一个是房子的名字,第二个是每个房子的房间的名字,第三个是每个房间的价格。 我要按房子数房间 表1 nid name 1 House 1 2 House 2 3 House 3 表2 Name house_ref_id id Room1 1 20 Room1 2 21 Room1 2

您好,我有以下树表,我想实现名为“想要的结果”的表。 第一个是房子的名字,第二个是每个房子的房间的名字,第三个是每个房间的价格。 我要按房子数房间

表1

nid    name
1      House 1
2      House 2 
3      House 3       
表2

Name     house_ref_id    id
Room1    1               20
Room1    2               21
Room1    2               22
Room1    3               23
Room1    3               24
表3

Price    room_ref_id
0        20
100      21
150      22
0        23
120      24
通缉结果:

nid      name       Rooms w/ price
1        House1     0
2        House2     2
3        House3     1
我已经尝试了以下代码,但可以得到适当数量的房间与价格

SELECT Name, COUNT(price) AS "rooms w/ price" FROM table_1
LEFT JOIN table_2 ON table_1.id = table_2.ref_id
LEFT JOIN table_3 ON table_2.room_ref_id = table_3.id 
WHERE table_3.price>0
GROUP BY table_1.nid
但是得到了如下结果:

nid     name      rooms w/ price
1       nouse1    1
2       house2    2
3       house3    2

接近。
中的条件,其中
将外部联接转换为内部联接。您需要将其移动到
ON
子句:

SELECT Name, COUNT(table3.id) AS "rooms w/ price"
FROM table_1 LEFT JOIN
     table_2 
     ON table_1.id = table_2.ref_id LEFT JOIN
     table_3
     ON table_2.room_ref_id = table_3.id AND table_3.price > 0
GROUP BY table_1.nid;

其中table_3.price=0或table_3.price为空
?根据您的数据,
nid=1
不应出现在输出中。您还应该修复标记以匹配您真正使用的数据库。谢谢gordon,我忘了在SELECT子句中包含nid,但我现在修复了它,谢谢您的回答server@scsimon,谢谢,我已经移除了标签以避免将来的混淆。谢谢,这真的很有效!我会再仔细看看Where条款的作用。非常感谢