- 表 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'
)
)
;
我可以在同一张表上使用 LEFT/RIGHT 外连接获得结果吗?还是我需要应用程序来获得结果。
我需要找到填充了 ITEM_ID 的 MAT 记录。
最佳答案
试试这个,如果没有帮助请告诉我
select
mat.ORDER_ID, mat.ORDER_TYPE,val.ITEM_ID,val.VALID_INVALID
from ORDER_ITEM mat
inner join ORDER_ITEM val
on mat.ORDER_ID = val.ORDER_ID
where mat.ORDER_TYPE='MAT' and val.ORDER_TYPE='VAL'
关于mysql - SQL连接同一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38545391/