[英]SQL join over same table
我尝试过这样的事情。 没有优化。 但这也无法获得预期的结果。 记录的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记录。
试试这个,让我知道是否有帮助
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'
我认为这会根据您所描述的要求拉出结果(通过可选的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结果,则希望更改为该联接。
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;
这肯定可以工作;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.