台灣最大程式設計社群網站
線上人數
649
 
會員總數:243856
討論主題:188345
歡迎您免費加入會員
討論區列表 >> ACCESS >> Inner join 帶出重複資料
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Inner join 帶出重複資料
價值 : 30 QP  點閱數:201 回應數:10

樓主

vettel
門外漢
0 22
316 13
發送站內信

資料表A

ID 價格 工單
1 10 A
2 20 A
3 30 A

-------------------------------
資料表B

ID 工單 請款金額
1 A 0
2 A 0
3 A 0

-------------------------------

我下INNER JOIN 的語法 SELECT A.ID,A.工單,A.價格,B.請款金額 FROM 資料表A INNER JOIN 資料表B ON A.ID=B.ID
卻帶出

ID 工單 價格 請款金額
1 A 10 0
2 A 20 0
3 A 30 0
1 A 10 0
2 A 20 0
3 A 30 0
1 A 10 0
2 A 20 0
3 A 30 0

按照邏輯應該只會帶出3筆資料
但為什麼卻會帶出這樣結果
請問是語法哪裡有錯嗎?



搜尋相關Tags的文章: [ Inner join 帶出重複資料 ] ,
本篇文章發表於2018-11-23 17:00
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
雖然你問題中描述的SQL大部分是對的(但是資料表名稱後面沒有alias)
所以應該不是你實際執行的SQL完整內容

按你描述的結果
比較可能的原因是join的條件恆為真
如打成ON A.ID=A.ID這樣的失誤是很常見的
建議你重新檢查完整的SQL內容
本篇文章回覆於2018-11-23 17:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

小魚
檢舉此回應
FROM 資料表A INNER JOIN 資料表B ON A.ID=B.ID

如果你的語法真的是這樣,
我相信你真的是一個新手,
你的語法中根本看不到A跟B,
我不知道MS-SQL是怎麽處理這種情況的,
也許處理成 ID = ID 吧

正確寫法應該是
FROM 資料表A AS A INNER JOIN 資料表B AS B ON A.ID=B.ID
一般來說AS是可以省略的,
不過我會習慣寫出來比較好理解.
本篇文章回覆於2018-11-23 17:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

vettel
檢舉此回應
按照兩位前輩的方式 增加alias

SELECT a.id, a.工單, a.價格, b.請款金額
FROM 資料表A AS a INNER JOIN 資料表B AS b ON a.id = b.id;

跑出來的結果還是一樣
請問是條件是 on 這邊需要做須改嗎?? 除了 on的方式 還有其他的方式嗎??
我上網爬文了解到的是用on的方式

P.S 我使用的是ACCESS 資料庫
本篇文章回覆於2018-11-26 09:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

小魚
檢舉此回應
Access的寫法可能會不大一樣,
這部分不太熟,
你可以用設計檢視去拉關聯線,
然後看他的語法是怎麼寫的...
本篇文章回覆於2018-11-26 19:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

roar
檢舉此回應
A及B之ID設為主索引,A及B要做關連,1對1後(A之ID對應B之ID)再設定SQL
SELECT A.ID, A.價格, A.工單, B.請款金額
FROM A INNER JOIN B ON A.[ID] = B.[ID]
本篇文章回覆於2018-11-27 13:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

kib72377
檢舉此回應
SELECT A.ID, A.工單, A.價格, B.金額
FROM A INNER JOIN B ON (A.工單 = B.工單) AND (A.ID = B.ID);

ID 和 工單 兩個都要做關聯
本篇文章回覆於2018-11-29 09:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

小魚
檢舉此回應
說的也是,
另外假如ID一樣工單就會一樣的話,
其實B的工單那一欄可以刪除了.
本篇文章回覆於2018-11-30 07:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
不錯的參考

kib72377
檢舉此回應
我照原問題做的
SELECT A.ID, A.工單, A.價格, B.金額 FROM A INNER JOIN B ON A.ID = B.ID;

結果是出現3筆而已,正常耶.

可見發問者,... 說的和實際做的不一樣,

依照原問題所述,
只有單獨[工單]關聯時,才會得到9筆資料.
本篇文章回覆於2018-11-30 08:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

小魚
檢舉此回應
那我就懂了,
難怪我想說同樣是SQL,
有差那麼多嗎?
本篇文章回覆於2018-12-01 07:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

vettel
檢舉此回應
感謝各位前輩的指導
經過修改之後 已經知道問題點在哪
謝謝大家
本篇文章回覆於2018-12-03 09:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.