iT邦幫忙

0

INNER JOIN SQL 三個資料表問題

  • 分享至 

  • xImage

請教各位以下SQL語法INNER JOIN SQL 三個資料表語法有錯嗎為何會撈無資料

/*零件零售-0708*/
SELECT     PARTSRETAIL.REGISTERUNIT_NAME 登記單位, PARTSRETAIL.PARTSRETAIL_NO 整理單號, ASSET.BUYERS  購買者, 
                      PARTSRETAIL.BRAND_NAME  產品品牌, PARTSRETAIL.MODEL_NAME  產品機型, WO.MECHANIC_NAME  維修技師, 
                      CONVERT(varchar, PARTSRETAIL.FIXEDDATE, 111)  技師結單時間, PARTSRETAIL.STATE_NAME  維修狀態, 
                      WO.MAINTAINEXPENSEAFTERDIS  折扣後維修工資, PARTSRETAIL.PARTSTOTALAFTERDIS  折扣後零件費用, 
                      PARTSRETAIL.INTPARTSDISCOUNT  零件折扣, PARTSRETAIL.PARTSTOTALAFTERDIS  整筆零件折扣後金額, 
                      PARTSRETAIL.TOTALAMOUNT  總計費用含稅, PARTSRETAIL.PAYTYPE_NAME  收款類別

FROM         (PARTSRETAIL INNER JOIN ASSET ON PARTSRETAIL.PARTSRETAIL_NO = ASSET.ASSET_ID)
             INNER JOIN WO ON PARTSRETAIL.PARTSRETAIL_NO = WO.ASSET_ID
WHERE      (PARTSRETAIL.PARTSRETAIL_NO >= '2022%') AND (PARTSRETAIL.PARTSRETAIL_NO <= '2022%')
ORDER BY 登記單位

https://ithelp.ithome.com.tw/upload/images/20220708/20148637Ki9GFcdYJv.png

https://ithelp.ithome.com.tw/upload/images/20220708/20148637SHtOq0Adz4.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
實習工程師
iT邦新手 1 級 ‧ 2022-07-11 11:14:27
最佳解答
/*零件零售-0708*/
SELECT     
PARTSRETAIL.REGISTERUNIT_NAME 登記單位
, PARTSRETAIL.PARTSRETAIL_NO 整理單號
, ASSET.BUYERS  購買者
, PARTSRETAIL.BRAND_NAME  產品品牌
, PARTSRETAIL.MODEL_NAME  產品機型
, WO.MECHANIC_NAME  維修技師
, CONVERT(varchar, PARTSRETAIL.FIXEDDATE, 111)  技師結單時間
, PARTSRETAIL.STATE_NAME  維修狀態
, WO.MAINTAINEXPENSEAFTERDIS  折扣後維修工資
, PARTSRETAIL.PARTSTOTALAFTERDIS  折扣後零件費用
, PARTSRETAIL.INTPARTSDISCOUNT  零件折扣
, PARTSRETAIL.PARTSTOTALAFTERDIS  整筆零件折扣後金額
, PARTSRETAIL.TOTALAMOUNT  總計費用含稅
, PARTSRETAIL.PAYTYPE_NAME  收款類別
FROM
(
		PARTSRETAIL 
			INNER JOIN ASSET 
				ON PARTSRETAIL.PARTSRETAIL_NO = ASSET.ASSET_ID

)
INNER JOIN WO 
	ON PARTSRETAIL.PARTSRETAIL_NO = WO.ASSET_ID
ORDER BY 登記單位

ASSET.ASSET_ID 是 資料型態是 【uniqueidentifier】
PARTSRETAIL.PARTSRETAIL_NO 是 資訊型態 【Ncahr(20)】

你可以先Join資料看看,先確定 "兩個資料表join完有資料後,在join下一個資料表"
不過我猜..是...資料表內的欄位資料不匹配,join錯了。

0
小魚
iT邦大師 1 級 ‧ 2022-07-08 19:38:00

這圖好亂,
看不懂,
不過這個為什麼有括號

FROM         (PARTSRETAIL INNER JOIN ASSET ON PARTSRETAIL.PARTSRETAIL_NO = ASSET.ASSET_ID)
看更多先前的回應...收起先前的回應...
yu0901 iT邦新手 4 級 ‧ 2022-07-10 14:52:41 檢舉

您好感謝回復
總共用到三個資料表分別為PARTSRETAIL(零件零售單),ASSET(產品註冊),WO(維修服務單)

FROM         (PARTSRETAILL(零件零售單) INNER JOIN ASSET(產品註冊) ON PARTSRETAIL.PARTSRETAIL_NO (整理單號)= ASSET.ASSET_ID(主索引鍵))
             INNER JOIN WO(維修服務單) ON PARTSRETAIL.PARTSRETAIL_NO = WO.ASSET_ID

https://ithelp.ithome.com.tw/upload/images/20220710/20148637sb9w5D2KWm.jpg
https://ithelp.ithome.com.tw/upload/images/20220710/20148637ectTFxMuEP.jpg
https://ithelp.ithome.com.tw/upload/images/20220710/20148637hERUUsfztm.jpg

小魚 iT邦大師 1 級 ‧ 2022-07-10 22:17:42 檢舉

先把括號拿掉試試看.

yu0901 iT邦新手 4 級 ‧ 2022-07-10 22:41:49 檢舉

您好原文是這樣

/*零件零售-0708*/
SELECT     PARTSRETAIL.REGISTERUNIT_NAME 登記單位, PARTSRETAIL.PARTSRETAIL_NO 整理單號, ASSET.BUYERS  購買者, 
                      PARTSRETAIL.BRAND_NAME  產品品牌, PARTSRETAIL.MODEL_NAME  產品機型, WO.MECHANIC_NAME  維修技師, 
                      CONVERT(varchar, PARTSRETAIL.FIXEDDATE, 111)  技師結單時間, PARTSRETAIL.STATE_NAME  維修狀態, 
                      WO.MAINTAINEXPENSEAFTERDIS  折扣後維修工資, PARTSRETAIL.PARTSTOTALAFTERDIS  折扣後零件費用, 
                      PARTSRETAIL.INTPARTSDISCOUNT  零件折扣, PARTSRETAIL.PARTSTOTALAFTERDIS  整筆零件折扣後金額, 
                      PARTSRETAIL.TOTALAMOUNT  總計費用含稅, PARTSRETAIL.PAYTYPE_NAME  收款類別

FROM         (PARTSRETAIL INNER JOIN ASSET ON PARTSRETAIL.PARTSRETAIL_NO = ASSET.ASSET_ID)
             INNER JOIN WO ON PARTSRETAIL.PARTSRETAIL_NO = WO.ASSET_ID
WHERE      (PARTSRETAIL.PARTSRETAIL_NO >= '2022%') AND (PARTSRETAIL.PARTSRETAIL_NO <= '2022%')
ORDER BY 登記單位

總共用到三個資料表分別為PARTSRETAIL(零件零售單),ASSET(產品註冊),WO(維修服務單)
但為何撈出資料是空白?
我的語法哪裡有錯嗎?

小魚 iT邦大師 1 級 ‧ 2022-07-11 07:20:28 檢舉

先把括號拿掉試試看.

FROM         (PARTSRETAIL INNER JOIN ASSET ON PARTSRETAIL.PARTSRETAIL_NO = ASSET.ASSET_ID)

不行的話,
看你要不要提供測試的資料.

0
allenlwh
iT邦高手 1 級 ‧ 2022-07-11 09:13:11
WHERE      (PARTSRETAIL.PARTSRETAIL_NO >= '2022%') AND (PARTSRETAIL.PARTSRETAIL_NO <= '2022%')

我如果沒記錯的話,%是不是只能搭配like使用。
改成這樣試試

WHERE (PARTSRETAIL.PARTSRETAIL_NO like '2022%')
yu0901 iT邦新手 4 級 ‧ 2022-07-11 10:30:35 檢舉

是JOIN的問題

SELECT     PARTSRETAIL.REGISTERUNIT_NAME AS 登記單位, PARTSRETAIL.PARTSRETAIL_NO AS 整理單號, PARTSRETAIL.BUYERS AS 購買者, 
                      PARTSRETAIL.BRAND_NAME AS 產品品牌, PARTSRETAIL.MODEL_NAME AS 產品機型, WO.MECHANIC_NAME AS 維修技師, 
                      CONVERT(varchar, PARTSRETAIL.FIXEDDATE, 111) AS 技師結單時間, PARTSRETAIL.STATE_NAME AS 維修狀態, 
                      WO.MAINTAINEXPENSEAFTERDIS AS 折扣後維修工資, PARTSRETAIL.PARTSTOTALAFTERDIS AS 折扣後零件費用, 
                      PARTSRETAIL.INTPARTSDISCOUNT AS 零件折扣, PARTSRETAIL.PARTSTOTALAFTERDIS AS 整筆零件折扣後金額, 
                      PARTSRETAIL.TOTALAMOUNT AS 總計費用含稅, PARTSRETAIL.PAYTYPE_NAME AS 收款類別
FROM         PARTSRETAIL INNER JOIN
                      WO ON PARTSRETAIL.PARTSRETAIL_NO = WO.WO_NO
WHERE      (PARTSRETAIL.PARTSRETAIL_NO LIKE '2022%')
ORDER BY 登記單位 DESC

https://ithelp.ithome.com.tw/upload/images/20220711/20148637X94L1MEXHP.png

我要發表回答

立即登入回答