如果数据不存在,如何将数据添加到表中?

时间:2016-04-13 14:43:03

标签: c# mysql sql winforms

我已经考虑过使用distinct但我不太确定如何将其作为单个查询来提高代码效率,有没有办法?我基本上试图检查是否已经有一个现有的数据条目,我试图用BookingTime检查它。谢谢:))

这是我的SQL查询:

   string bookingInfo = "INSERT INTO Booking(BookingDate, BookingTime, CustomerID, EmployeeID, ServiceType, BookingLength) " +
                      "VALUES (@BookingDate, @BookingTime, @CustomerID, @EmployeeID, @ServiceType, @BookingLength) " +
                     "where not exists (SELECT 1 FROM Booking WHERE BookingTime = @BookingTime)";

我收到的错误:"其他信息:查询输入必须包含至少一个表格或查询。"

2 个答案:

答案 0 :(得分:0)

string bookingInfo = "INSERT INTO Booking(BookingDate, BookingTime, CustomerID, EmployeeID, ServiceType, BookingLength) " +
                  "SELECT @BookingDate, @BookingTime, @CustomerID, @EmployeeID, @ServiceType, @BookingLength " +
                 " FROM Booking WHERE NOT EXISTS (SELECT * FROM Booking WHERE BookingTime = @BookingTime) LIMIT 1 "

试试这个SqlFiddle

答案 1 :(得分:0)

WHERE子句无效在" INSERT ... VALUES"声明显示。

MySQL确实提供了一个" INSERT ... SELECT ..." INSERT语句的形式(不使用VALUES子句)。 SELECT语句可以有一个WHERE子句,但要在SELECT中包含WHERE子句,必须有一个FROM子句。您可以使用内联视图(也称为派生表)返回单个行,或者您可以使用内置Oracle样式的虚拟表DUAL返回单个行。 (我们不关心返回哪些列,我们只需要返回一行。)

例如:

INSERT INTO Booking
( BookingDate
, BookingTime
, CustomerID
, EmployeeID
, ServiceType
, BookingLength
) 
SELECT @BookingDate
     , @BookingTime
     , @CustomerID
     , @EmployeeID
     , @ServiceType
     , @BookingLength
 FROM ( SELECT 1 ) i
WHERE NOT EXISTS 
      ( SELECT 1
          FROM Booking b 
         WHERE b.BookingTime = @BookingTime
      )

现在SELECT语句(可以与INSERT分开测试)将返回零行或一行。它返回的任何行都将传递给INSERT。

作为" NOT EXISTS"的替代品。谓词,你可以使用反连接模式:

SELECT @BookingDate
     , @BookingTime
     , @CustomerID
     , @EmployeeID
     , @ServiceType
     , @BookingLength
 FROM ( SELECT 1 ) i
 LEFT
 JOIN Booking b
   ON b.BookingTime = @BookingTime
WHERE b.BookingTime IS NULL