下面的我的SQL查询说它在第一次内连接时没有正确结束?如果我删除了第二个表和where子句,查询就可以了吗?
SELECT homes.home_id, homes.title, homes.description, homes.living_room_count, homes.bedroom_count, homes.bathroom_count, homes.price, homes.sqft,
listagg(features.feature_name, '\n') WITHIN GROUP(ORDER BY features.feature_name) features, home_type.type_name
FROM homes, bookings
WHERE bookings.booking_end < date '2013-01-23' OR bookings.booking_start > date '2013-01-22' AND bookings.home_id <> homes.home_id
INNER JOIN home_feature ON homes.home_id = home_feature.home_id
INNER JOIN home_type ON home_type.type_code = homes.type_code
INNER JOIN features ON home_feature.feature_id = features.feature_id
GROUP BY homes.home_id, homes.title, homes.description, homes.living_room_count, homes.bedroom_count, homes.bathroom_count, homes.price, homes.sqft, home_type.type_name
我的查询可以看到任何明显的错误吗?
答案 0 :(得分:7)
您的WHERE
子句位置错误,您正在混合连接类型:
SELECT homes.home_id,
homes.title, homes.description,
homes.living_room_count,
homes.bedroom_count,
homes.bathroom_count,
homes.price,
homes.sqft,
listagg(features.feature_name, '\n') WITHIN GROUP(ORDER BY features.feature_name) features,
home_type.type_name
FROM homes
INNER JOIN bookings
ON bookings.home_id = homes.home_id
INNER JOIN home_feature
ON homes.home_id = home_feature.home_id
INNER JOIN home_type
ON home_type.type_code = homes.type_code
INNER JOIN features
ON home_feature.feature_id = features.feature_id
WHERE bookings.booking_end < date '2013-01-23'
OR booking_start > date '2013-01-22'
GROUP BY homes.home_id, homes.title, homes.description,
homes.living_room_count, homes.bedroom_count,
homes.bathroom_count, homes.price, homes.sqft, home_type.type_name
WHERE
子句出现在JOIN
之后和GROUP BY
之前。您还应该使用一种类型的连接语法。您使用的是显式和隐式语法。我已将homes
和booking
的联接移至JOIN
,而不是在表格之间使用逗号。