我试过这样的事情。没有优化。但这也没有给出预期的结果。记录的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记录。
答案 0 :(得分:3)
试试这个,让我知道如果没有帮助
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'
答案 1 :(得分:2)
我认为这会根据您描述的要求提取结果(使用可选的order by
来获得与示例结果相同的顺序):
select mats.order_id, mats.order_type, vals.item_id, mats.valid_invalid
from order_item mats
join order_item vals
on (mats.order_id = vals.order_id
and mats.order_type = 'MAT'
and vals.order_type = 'VAL')
order by mats.order_id, vals.item_id;
关于任何左连接,如果您还有任何没有相应VAL记录的MAT条目,并且仍希望检索这些MAT结果,则需要更改为该连接。
答案 2 :(得分:0)
SELECT
OI1.itemid,
OI1.order_id,
OI2.valid_invalid
FROM OI OI1
INNER JOIN (
SELECT
order_id,
valid_invalid
FROM OI
WHERE Order_type = 'MAT'
) OI2 ON OI1.Order_ID = OI2.order_id
AND OI1.Itemid IS NOT NULL;
这肯定会起作用;)