我正在asp.net中编写有关管理研讨室的程序。在我的预订表中,有预订ID,客户ID。房间ID,dateIn和dateOut。只有当新实体的dateIn和dateOut与现有实体不重叠时,我才尝试插入行
我使用了MySql 8.0
INSERT INTO reservations (client_id, room_id, date_in, date_out) VALUES ((SELECT id FROM user WHERE first_name=@fname AND last_name=@lname), @roomId, @dateIn, @dateOut) WHERE NOT EXISTS (SELECT FROM reservations WHERE ((@dateIn >= date_in AND @dateIn <= date_in) OR (@dateOut >= date_out AND @dateOut <= date_out))) LIMIT 1
错误:
MySql.Data.MySqlClient.MySqlException: 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT FROM reservations WHERE (('2019-07-22 11:00:00' >= dat' at line 1'
答案 0 :(得分:1)
您可以使用INSERT SELECT格式,但是必须检查插入的行数才能知道插入是否成功
INSERT INTO reservations (client_id, room_id, date_in, date_out)
SELECT id, @roomId, @dateIn, @dateOut
FROM user
WHERE first_name=@fname
AND last_name=@lname
AND NOT EXISTS (
SELECT *
FROM reservations
WHERE date_out >= @dateIn
AND date_in <= @dateOut
)
我也修复了您的重叠逻辑。
条件((@dateIn >= date_in AND @dateIn <= date_in)
仅在@dateIn
等于date_in时为真。