Oracle-10g
給定查詢之間的差異
我需要檢索
pno
兩個客戶購買的產品的 ( product_id ) 列表。為此,我得到了兩個關係(連同屬性)如下。odetails(ono,pno,qty) orders(ono,cno,eno,received,shipped)
這裡
ono
是 order_id,pno
是 product_id,qty
是庫存產品的數量,cno
是購買產品的客戶的 customer_id,eno
是銷售產品的 employee_id,是received
客戶收到產品的日期和shipped
是產品的發貨日期。ono
是 的主鍵orders
和外鍵odetails
。ono
,pno
,qty
構成 的主鍵odetails
。一個查詢是:-
select distinct d.pno from odetails d,orders o1,orders o1 where d.ono=o1.ono and d.ono=o2.ono and o1.cno<o2.cno;
另一個查詢是:
select distinct d1.pno from odetails d1,odetails d2,orders o1,orders o1 where d1.ono=d2.ono and d1.ono=o1.ono and d2.ono=o2.ono and o1.cno<o2.cno;
你能告訴我這兩個查詢有什麼區別嗎?它們似乎都以相同的方式工作,除了第二個查詢似乎正在做額外的和無用的工作來比較兩者
odetails
,而他們甚至不需要這樣做。
考慮以下
odetails
數據:ono pno --------- 1 1 1 2
如果你自己加入它
ono
,比如SELECT pno FROM odetails d1 JOIN odetails d2 ON d1.ono = d2.ono;
那麼你將得到四行而不是兩行。因此,即使返回相同的數據,這兩個查詢的含義也不同(感謝
DISTINCT
關鍵字)。(兩次加入
orders
表可能會出現類似問題。由於您沒有提及此查詢的確切要求,因此無法確定第一個查詢是否正確。(感謝 ypercube 提及這一點。))