![]() |
1
3
可能是子查询:
|
![]() |
2
1
除非我误解了,否则像这样的事情应该能起到作用:
使用exists的好处是一旦罚款第一场比赛就停止。 |
![]() |
3
1
我知道现在回复已经很晚了,但是我刚刚看到这个帖子,我想我应该试试这个,这个查询怎么样,和上面所有的解决方案相比,它真的很小,并且解决了这个问题。
|
![]() |
4
0
希望我回答对了。这将返回在提供的时间戳内已更改的所有订单。
|
![]() |
5
0
你可以自己加入这张桌子。简单地说,这看起来像:
|
![]() |
6
0
再次感谢你的建议。我找到了三个可行的解决方案,包括我的原创方案。最后,我添加了一些性能结果,这些结果并没有我所希望的那么好。如果有人能在这方面有所改进,我会很激动的! 1)目前发现的最佳解决方案似乎是: SELECT history_orders.order_id, history_orders.tstamp, history_orders.item_id FROM (SELECT orders.order_id, orders.tstamp, orders.item_id FROM orders WHERE orders.tstamp BETWEEN '2010-01-03' AND '2010-01-09' OR orders.tstamp IS NULL) AS history_orders WHERE history_orders.order_id IN (SELECT orders.order_id FROM orders WHERE orders.tstamp BETWEEN '2010-01-03' AND '2010-01-09'); 2)我还尝试使用exists in代替in,这需要在最后一个select中添加一个where子句: SELECT history_orders.order_id, history_orders.tstamp, history_orders.item_id FROM (SELECT orders.order_id, orders.tstamp, orders.item_id FROM orders WHERE orders.tstamp BETWEEN '2010-01-03' AND '2010-01-09' OR orders.tstamp IS NULL) AS history_orders WHERE EXISTS (SELECT orders.order_id FROM orders WHERE history_orders.order_id = orders.order_id AND orders.tstamp BETWEEN '2010-01-03' AND '2010-01-09'); 3)最后是我的原始解决方案,使用union。
评论:
性能-我运行每个解决方案三次,以下是我的实际结果:
|
![]() |
koryakinp · Where子句和Join的LINQ顺序 7 年前 |
![]() |
lost9123193 · 使用。Where子句和筛选数组的条件 7 年前 |
|
user9639519 · 如何基于索引外的行向新列返回值 7 年前 |
![]() |
PWT · 如何在何处设置SQL条件 7 年前 |
|
user8420047 · Where子句的SQL问题 7 年前 |
![]() |
Rebel · 如何隔离具有受约束高度的三维曲面的区域? 7 年前 |
![]() |
Mark · SQL;按合并列搜索 7 年前 |
![]() |
Saef Myth · Mysql比较两个数字列表 7 年前 |
![]() |
SAT · 为什么在if中使用LINQ会更改属性 7 年前 |