在MySql中插入新行时可以使用WHERE吗?

时间:2019-07-22 07:12:00

标签: mysql

我正在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'

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时为真。