我想得到没有为当前日期保留的表的数量,因为我写了这个存储过程,但总是给我0。
USE [RestaurantProject]
GO
/****** Object: StoredProcedure [dbo].[sp_GetAvailableTables] Script Date: 9/17/2014 3:00:43 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_GetAvailableTables]
AS
BEGIN
SET NOCOUNT ON;
SELECT COUNT(t.TableID) AS TableCount
FROM Tables t
INNER JOIN Orders o
ON t.TableID <> o.TableID
WHERE o.OrderDate < GETDATE()
END
答案 0 :(得分:1)
如果我正确理解您的问题,您的join
就会搞砸了。我认为你最好使用not exists
:
SELECT COUNT(*)
FROM Tables t
WHERE NOT EXISTS (
select *
from orders o
where o.tableid = t.tableid and o.orderdate < getdate())
注意:这可能无法返回正确的结果。取决于orders
表中的数据。您可能希望使用o.orderdate > getdate()
代替<
。这将为您提供所有没有预留大于getdate()
的表格。
答案 1 :(得分:1)
试试这个
SELECT COUNT(t.TableID) AS TableCount
FROM Tables t
left JOIN Orders o ON t.TableID = o.TableID and o.OrderDate = GETDATE()
where o.TableID is null
我已将所有逻辑移入join子句,然后过滤掉不匹配的记录。
我们所说的是:
向我提供所有订单日期为今天没有订单的表格。
这将比查询更好,因为它有一个较小的结果集可以过滤。
如果我是你,我会把你要检查的日期作为参数传递,这个sp将会返回不同的结果,具体取决于你何时调用它,这将使你以后的生活变得困难如果你想要重现结果。