MySQL JOIN行存在但与where语句不匹配

时间:2018-07-14 20:31:59

标签: mysql

下面是2个表和一个select语句,我正在尝试进行工作,但是遇到了一个问题。有人可以看看这个并帮帮我。 (以下详细信息)

表“ company_locatons”

id | company_id | location  | deleted
1  | 1          | Las Vegas | 0

表“ location_images”

id | location_id | image                                 | deleted
1  | 1           | company-name.las-vegas.1531516751.jpg | 1
2  | 1           | company-name.las-vegas.1531516752.jpg | 1
3  | 1           | company-name.las-vegas.1531516753.jpg | 1

选择语句:

SELECT `cl`.*, ifnull(li.image, "") AS image 
FROM `company_locations` `cl` 
LEFT JOIN `location_images` `li` 
    ON `li`.`location_id` = `cl`.`id` 
WHERE (`li`.`deleted` =0 OR `li`.`id` IS NULL) 
    AND `cl`.`deleted` =0 
ORDER BY `rating` DESC

如果location_images表中没有公司位置的记录,它会完美返回,但是由于有记录,并且它们与我没有结果的位置不匹配。

编辑:

预期产量

cl.id | cl.company_id | cl.location  | image | cl.deleted
1     | 1             | Las Vegas    | NULL  | 0

2 个答案:

答案 0 :(得分:0)

您的WHERE语句使用

过滤location_images中的所有内容
 `li.deleted =0`

但是,您的location_images中的所有记录都设置为1。然后正常不返回任何东西。请更新您的location_images中的记录并进行设置 deleted=0,以便查询按预期运行。

答案 1 :(得分:0)

由于雷蒙德·尼兰(Raymond Nijland)的建议,我得以解决问题。

SELECT `cl`.*, ifnull(li.image, "") AS image 
FROM `company_locations` `cl` 
LEFT JOIN (SELECT id, location_id, image FROM location_images WHERE deleted = 0) `li`
    ON (`li`.`location_id` = `cl`.`id` OR `li`.`id` IS NULL) 
WHERE `cl`.`deleted` =0 
ORDER BY `rating` DESC

我真的应该猜到这是解决方案,但是我忘记了可以在JOIN ON上添加OR