我已经考虑过使用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)";
我收到的错误:"其他信息:查询输入必须包含至少一个表格或查询。"
答案 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