【发布时间】:2012-05-19 15:57:35
【问题描述】:
我遇到了一个 sql 查询问题
这是我的查询:
SELECT `rooms`.*
FROM `rooms`
WHERE (`rooms`.`room_id` NOT IN (
SELECT *
FROM `reservations` `res`
WHERE ('2012-05-03' NOT BETWEEN res.expected_checkin_date
AND res.expected_checkout_date)
AND ('2012-05-08' NOT BETWEEN res.expected_checkin_date
AND res.expected_checkout_date)))
问题是当第二个select返回null时,显示如下错误:
#1241 - Operand should contain 1 column(s)
谁能帮帮我?
EDIT
当我运行此查询时,它会显示所有行,甚至包括第二个 select 内的行
不知道为什么?
SELECT `rooms`.*, `type`.*, `status`.* FROM `rooms` INNER JOIN `room_types` AS `type` ON `type`.`room_type_id` = `rooms`.`room_type_id` AND `type`.`num_beds` >= 1 AND type.room_type_id=2 INNER JOIN `room_statuses` AS `status` ON `status`.`room_status_id` = `rooms`.`room_status_id` WHERE (`rooms`.`room_id` NOT IN (SELECT `res`.`room_id` FROM `reservations` `res` WHERE (res.expected_checkin_date >= '2012-05-01' AND res.expected_checkin_date < '2012-05-31') AND (res.expected_checkout_date >= '2012-05-31' AND res.expected_checkout_date < '2012-05-31')))
【问题讨论】:
-
@Keyser 为什么你一直在延续这个神话?上次我给你发了关于 Sql Server 的 IN/NOT IN 比 JOIN 更高效,explainextended.com/2009/06/16/in-vs-join-vs-exists 这是 MySQL explainextended.com/2010/05/27/…
-
@MichaelBuen 错过了您的第一条评论。我一直在延续它,因为我在几个地方读到过它。我现在彻底研究了它,现在同意你的看法。
标签: mysql sql mysql-error-1241