簡體   English   中英

sql內部聯接不適用於內部聯接

[英]sql inner join not working for inner join

我有客戶,物品,制造,訂單,庫存等表格。請參閱http://www.oninit.com/manual/informix/english/docs/gn7382/4366.pdf

我想獲得訂購了Smith公司所制造的東西的每個人(及其居住的城市和州)的名字和姓氏。 包括描述(來自庫存表)。

如果我執行第一部分為

select c.fname, c.lname, c.city, c.state from customer c join orders o using (customer_num)
join items i using(order_num)
join manufact m using(manu_code)  where m.manu_name = 'Smith' ;

我得到了8條正確的記錄,我進一步希望從stock表獲得這些記錄的描述,因此我在stock表上創建了一個聯接

select c.fname, c.lname, c.city, c.state, s.description from customer c join orders o using (customer_num)
join items i using(order_num)
left join (manufact m join stock s on m.manu_code=s.manu_code) on m.manu_code = i.manu_code where m.manu_name = 'Smith';

現在,它給了我24條我沒想到的記錄。 如何編寫嵌套查詢以僅獲取8條記錄?

庫存模式在此處輸入圖像描述

您有24個制造商的庫存商品。 您需要確定要顯示的內容。

您的查詢正在執行您想要的操作。

不過,我要說的是,沒有嵌套聯接的查詢結構更簡單。 您還省略了description

select c.fname, c.lname, c.city, c.state, s.description
from customer c join
     orders o
     using (customer_num) join
     items i
     using (order_num) join
     manufact m
     using (manu_code) join
     stock s
     using (manu_code)
where m.manu_name = 'Smith';

我還懷疑stock有一些您也應該加入的itemid

你可以從你的股票表看到,有多個stock_nummanu_code m.manu_name = 'Smith'對應的manu_code有3個stock_num

這就是為什么您的查詢返回8 * 3 = 24行的原因。

為了獲得適當的結果,您可以

select c.fname, c.lname, c.city, c.state, s.description
from customer c 
     join orders o using (customer_num) 
     join items i using (order_num) 
     join manufact m using (manu_code) 
     join (select description from stock group by manu_code) AS s ON s.manu_code = m.manu_code
where m.manu_name = 'Smith'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM