下面是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
答案 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
。