SQL:LEFT OUTER JOIN的帮助

1 sql database database-design query-optimization

看来我的SQL不是基于的限制结果price.

在我之前的帖子中,SQL:帮助我优化我的SQL,人们表示我应该使用LEFT OUTER JOIN.

SELECT homes.home_id, 
    address, 
    city, 
    state, 
    zip, 
    price, 
    photo_id, 
    photo_url_dir
FROM homes
LEFT OUTER JOIN home_photos ON homes.home_id = home_photos.home_id
AND primary_photo_group_id = home_photo_group_id
AND home_photo_type_id =2
AND display_status = true
AND homes.price BETWEEN 500000 AND 1000000
Run Code Online (Sandbox Code Playgroud)

但是,它仍然显示价格<500000的房屋

我不明白.当我有一个WHERE条件来精确限制该字段时,为什么上面的SQL会显示价格低于500000的房屋.

谢谢你的帮助.

我想做的事

我希望根据PRICEX和Y之间的标准显示家庭和家庭没有home_photo ...或者SQFTZ.但是这些标准需要应用于那些有和homes没有a的家庭.home_photo

它是否正确?

SELECT homes.home_id, 
    address, 
    city, 
    state, 
    zip, 
    price, 
    photo_id, 
    photo_url_dir
FROM homes
LEFT OUTER JOIN home_photos ON homes.home_id = home_photos.home_id
    AND homes.primary_photo_group_id = home_photos.home_photo_group_id
    AND home_photos.home_photo_type_id =2
WHERE homes.display_status = true
AND homes.price BETWEEN 500000 AND 1000000
Run Code Online (Sandbox Code Playgroud)

SQL*_*ace 19

最后一行应该使用WHERE而不是AND

WHERE homes.price BETWEEN 500000 AND 1000000
Run Code Online (Sandbox Code Playgroud)

最终结果是以下SQL:

SELECT 
    homes.home_id, 
    homes.address, 
    homes.city, 
    homes.state, 
    homes.zip, 
    homes.price, 
    home_photos.photo_id, 
    home_photos. photo_url_dir
FROM 
    homes
    LEFT OUTER JOIN home_photos ON 
        homes.home_id = home_photos.home_id
        AND homes.primary_photo_group_id = home_photos.home_photo_group_id
        AND home_photos.home_photo_type_id =2
WHERE
    homes.price BETWEEN 500000 AND 1000000
    AND homes.display_status = true
Run Code Online (Sandbox Code Playgroud)

编辑

现在你的SQFT将在WHERE之前

AND home_photos.home_photo_type_id =2 
AND SQFT <=2000 
WHERE homes.price BETWEEN 500000 AND 1000000
Run Code Online (Sandbox Code Playgroud)