小编mac*_*tus的帖子

比使用"A UNION(B in A)"更高效的SQL?

编辑1(澄清):感谢您到目前为止的答案!回应令人满意.
我想稍微澄清一下这个问题,因为根据答案,我认为我没有正确描述问题的一个方面(而且我确信这是我的错,因为即使是我自己也很难定义它).
这里的难题是:结果集应该只包含与BETWEEN"2010-01-03" TSTAMP的记录和"2010-01-09",以及一个记录,其中TSTAMP IS NULL在第一组中的每个order_num(会有对于每个order_num,总是一个null tstamp).
到目前为止给出的答案似乎包括某个order_num的所有记录(如果有的话)与tstamp BETWEEN'2010-01-03'和'2010-01-09'.例如,如果存在与order_num = 2和TSTAMP另一个记录= 2010-01-12 00:00:00它应该不被包含在结果中.

原始问题:
考虑包含id(唯一),order_num,tstamp(时间戳)和item_id(订单中包含的单个项目)的订单表.除非订单已被修改,否则tstamp为null,在这种情况下,存在具有相同order_num的另一个记录,然后tstamp包含更改发生时的时间戳.

例...

id  order_num  tstamp               item_id
__  _________  ___________________  _______
 0          1                           100
 1          2                           101
 2          2  2010-01-05 12:34:56      102
 3          3                           113
 4          4                           124
 5          5                           135
 6          5  2010-01-07 01:23:45      136
 7          5  2010-01-07 02:46:00      137
 8          6                           100
 9          6  2010-01-13 08:33:55      105

检索在特定日期范围内被修改过一次或多次的所有订单(基于order_num)的最有效的SQL语句是什么?换句话说,对于每个订单,我们需要具有相同order_num的所有记录(包括具有NULL tstamp的那个),对于每个order_num,WHERE中至少有一个order_num具有tstamp NOT NULL和tstamp BETWEEN'2010-01-03'和'2010-01-09'.这是"我们遇到困难时,至少有一个order_num具有tstamp NOT NULL". …

sql union where

5
推荐指数
1
解决办法
1300
查看次数

标签 统计

sql ×1

union ×1

where ×1