iT邦幫忙

0

SQL問題

sql

請教各位大大:
有三個TABLE要join,分別為主件品號檔a,子件品號檔b, 品號基本資料檔c。
a1欄為主件品號與b1欄關聯,再關聯到c1捉出主件的品名。如果同時要捉出子件的品名,要如何作。
註: b2欄為子件品號

lancelotz iT邦新手 3 級 ‧ 2010-01-14 08:18:44 檢舉
是BOM表展開的意思嗎?

2 個回答

12
kaowoei
iT邦研究生 4 級 ‧ 2010-01-14 08:44:02
最佳解答

關鍵在C要被JOIN兩次:
SELECT w.a1,y.c2,x.b2,z.c2
FROM a as w
JOIN b as x
ON x.b1=w.a1
JOIN c as y
ON y.c1=w.a1
JOIN c as z
ON z.c1=x.b2

jamesjan iT邦高手 1 級 ‧ 2010-01-14 09:17:54 檢舉

基本上這樣做是對的
補充一下 kaowoei 的回答
如果 a 主件沒有子件的時候
透過 join(inner join) 時 主件的料件 就會被濾掉 不會顯示出來
如果 a 的主件要全部顯示
需用 left join(子件的部份位顯示為 NULL)

SELECT w.a1,y.c2,x.b2,z.c2
FROM a as w
LEFT JOIN b as x
ON x.b1=w.a1
LEFT JOIN c as y '如果主料件都存在 C 基本檔,則可以不用做 LEFT
ON y.c1=w.a1
LEFT JOIN c as z '此 JOIN 是 for B 使用,所以要加 LEFT
ON z.c1=x.b2

10
ycl8000
iT邦高手 1 級 ‧ 2010-01-14 08:18:10

不曉得對不對, 參考看看吧

select c1.子件品名
from a1
inner join b1
inner join c1
on b1.子件品號=c1.子件品號
on a1.主件品號=b1.主件品號
where a1.主件品號=xxxxx

我要發表回答

立即登入回答