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