表:国家
1 | Usa
2 | Canada
3 | Russia
4 | Japan
表:(many2many)country_services
1 | 1
1 | 2
1 | 3
1 | 4
2 | 1
2 | 2
2 | 3
3 | 1
表:服务
1 | service1
2 | service2
3 | service3
4 | service4
5 | service5
6 | service6
我正在努力获得下一个结果:
1 | USA | service1
2 | USA | service2
3 | USA | service3
4 | USA | service4
我的查询是
SELECT s.service_id
, s.service_name
, c.country_name
FROM services s
LEFT
JOIN country_service cs
ON cs.service_id = s.service_id
AND cs.country_id = 1
LEFT
JOIN countries c
ON c.country_id = cs.country_id;
然后它返回:
service_id | service_name |服务名
1 | service1 | USA 2 | service2 | USA 3 | service3 | USA 4 | service4 | USA 5 | service5 | null 6 | service6 | null
请帮我纠正我的疑问。感谢
答案 0 :(得分:0)
LEFT OUTER JOIN将从查询左侧指定的表中返回ALL ROWS,以及查询右侧表中的匹配行。
要获得您正在寻找的结果,您将需要使用INNER JOIN:
SELECT services.service_id, services.service_name, countries.country_name
FROM services
INNER JOIN country_service
ON services.service_id = country_service.service_id
AND country_service.country_id =1
INNER JOIN countries
ON country_service.country_id = countries.country_id
答案 1 :(得分:0)
使用INNER JOIN
代替LEFT OUTER JOIN
。
看一下joins work
的方式答案 2 :(得分:0)
由于您需要来自美国的专门服务,因此您应该将联接更改为INNER
:
SELECT services.service_id, services.service_name, countries.country_name
FROM services
INNER JOIN country_service ON services.service_id = country_service.service_id AND country_service.country_id =1
INNER JOIN countries ON country_service.country_id = countries.country_id