我遇到了一个复杂的查询,如果日期范围在特定日期之前,我需要从此查询结果中排除产品列表,但是在日期之后包括if。每条记录都有自己的日期,但排除/包含的日期是固定的。
我从另一个视图中获取产品列表。
我的SQL生锈了(我通常编写很多Objective C代码),有人可以帮我解释如何编写这个查询吗?
示例查询:
选择AuthDate,ProductId,* 来自ProductOrders
ProductOrders表包含所有类型产品的大量订单,此处我想排除来自其他视图的产品列表(vwExcludeProducts),如果AuthDate在2011年9月1日之前的特定日期之前,但包括if 2011年9月1日之后。
vwExcludeProducts只返回被排除的产品列表的ProductId,因此我认为我需要将此视图与ProductOrders表连接,并且只有在AuthDate为<时才会查看它。 2011年9月1日。
ProductOrders样本数据:
产品ID |说明| AuthDate 1描述2011-08-30 2描述2011-08-30 3描述2011-08-30 4 Desc 4 2011-08-30 5描述2011-09-01
在这种情况下,vwExcludeProducts视图返回我要隐藏的ProductId 4,因此它应该隐藏它但显示其他...如果vwExcludeProducts也包含ProductId 5,那么它将不会隐藏,因为它的after / include 2011年9月1日。< / p>
由于
答案 0 :(得分:1)
这样的东西?:
SELECT AuthDate, ProductId, *
FROM ProductOrders
WHERE (NOT EXISTS (SELECT 1 FROM vwExcludeProductOrders WHERE ProductId = ProductOrders.ProductId) AND AuthDate < '2011-09-01')
OR AuthDate >= '2011-09-01'
显然使用*来选择所有列不是最佳做法,您应该只指定需要检索的列,但是如果没有关于要求的信息,则很难知道要建议的内容。