从左连接查询返回不正确的数据

时间:2014-02-25 15:14:46

标签: mysql join

表:国家

country_id | COUNTRY_NAME

    1  | Usa
    2  | Canada
    3  | Russia
    4  | Japan

表:(many2many)country_services

country_id |的service_id

    1   |    1
    1   |    2
    1   |    3
    1   |    4
    2   |    1
    2   |    2
    2   |    3
    3   |    1

表:服务

service_id |服务名

    1  | service1
    2  | service2
    3  | service3
    4  | service4
    5  | service5
    6  | service6

我正在努力获得下一个结果:

service_id | country_name |服务名

    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

请帮我纠正我的疑问。感谢

3 个答案:

答案 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