[英]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.