我有一个mysql查询,从2个表'属性'和'提供'交互。MySQL的查询多JOIN两个表在多个列上
的“报价”表具有可以通过一个唯一的代码或由房产所在县或区域或者指的是特定记录匹配属性表中的记录。
这里是我的查询的例子...
SELECT *, ROUND(((3959 * acos(cos(radians(51.1080390)) * cos(radians(latitude)) * cos(radians(longitude) - radians(-4.1610140)) + sin(radians(51.1080390)) * sin(radians(latitude)))) * 2),0)/2 AS `distance`
FROM `properties` AS prop
LEFT JOIN `offers` ON prop.code = offers.the_property
LEFT JOIN `offers` AS offsCnty ON prop.county = offsCnty.the_county
LEFT JOIN `offers` AS offsRgn ON prop.region = offsRgn.the_region
HAVING distance <= 2.5
ORDER BY `sleeps` ASC, `distance` ASC
LIMIT 0, 10
在报价表中的3列the_property
/the_county
/the region
是用于连接合适的报价与物业/ IES至关重要。如果要约要应用于整个县,则the_property
字段为空,否则如果要约是针对特定属性的,则此字段包含唯一属性代码。
我认为通过使用多个JOIN将是解决方案,但是当三个主要的offer
字段中的任何一个为空时,联接将为offers
表字段返回“NULL”。
这怎么解决?
非常感谢
'LEFT JOIN'意味着,如果没有行相匹配的'ON'条件,应该用'NULL'填充它。但只要它匹配3个连接中的一个,就应该在该组列中获得非空值。 – Barmar