1

看来我的 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

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

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

谢谢你的帮助。

我想做的事

PRICE我想根据X 和 Y ... 或 > Z 之间的标准显示有和没有 home_photo 的房屋SQFT。但是这些标准需要同时适用于那些有和homes没有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
4

4 回答 4

19

最后一行应该使用 WHERE not AND

WHERE homes.price BETWEEN 500000 AND 1000000

The end result is the following 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

EDIT

now your SQFT would go before the WHERE

AND home_photos.home_photo_type_id =2 
AND SQFT <=2000 
WHERE homes.price BETWEEN 500000 AND 1000000
于 2009-06-24T19:03:52.033 回答
0

Use the join conditions after JOIN keyword and all other filter conditions after the WHERE clause

于 2009-06-24T19:06:32.637 回答
0

Try this...

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
WHERE 
home_photo_type_id =2
AND 
display_status = true
AND 
homes.price BETWEEN 500000 AND 1000000
于 2009-06-24T19:06:59.423 回答
0

You have all the conditions in the join, you should have some of them in a where clause to limit the query. Something like:

select
   homes.home_id, 
   address, 
   city, 
   state, 
   zip, 
   price, 
   photo_id, 
   photo_url_dir
from
   homes
left join
   home_photos on homes.home_id = home_photos.home_id
where
   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

As I don't know which table each field comes from, I don't know if the above makes sense. Divide the conditions between the join and the where as it fits.

于 2009-06-24T19:10:10.493 回答