【发布时间】:2016-11-27 11:25:02
【问题描述】:
- 表 ORDER_ITEM 只有 2 种记录。 ORDER_TYPE MAT 和 VAL
- 使用 ORDER_TYPE MAT 的记录没有 ITEM_ID
- 使用 ORDER_TYPE VAL 的记录始终具有 ITEM_ID
- VAL 和 MAT 之间的链接是 ORDER_ID。这意味着一个 ORDER_ID 可以有多个 VAL 但只有一个 MAT。
- 我需要找出 ORDER_TYPE MAT 是 VALID 还是 INVALID 的 ITEM_ID。因为表在 JOB_DATE 上可能很大。我们想把它放在缓存中。
我尝试过这样的事情。未优化。但这也没有给出预期的结果。记录的ITEM_ID 为空。
select *
from ORDER_ITEM
where ORDER_TYPE = 'MAT'
and JOB_DATE = '7/22/2016'
and ORDER_ID in (
select ORDER_ID
from ORDER_ITEM
where ITEM_ID in (
select ITEM_ID
from ORDER_ITEM
where JOB_DATE = '7/22/2016'
and ORDER_TYPE = 'VAL'
)
)
;
我可以在同一张表上使用左/右外连接获得结果吗?或者我需要应用编程来获得结果。
我需要找到填充了 ITEM_ID 的 MAT 记录。
【问题讨论】:
-
您对架构(即索引)有任何控制权吗?
-
@Anthony:不,我没有。但我可以知道你为什么问这个。如果我有怎么办。
-
将
AND VALID_INVALID = 'VALID'放在主 WHERE 子句中的 DATE 之后还不够吗?你会忽略其他一切。 -
您的结果中有 INVALID 但仅在 #5 中声明 VALID
-
我会做出有问题的更正。真正的问题是如何在这些 MAT 记录中获取 ITEM_ID。
标签: mysql sql oracle join query-optimization