iT邦幫忙

1

[已解決]SQL撈出奇怪的資料?

Select a.商品貨號, a.訂貨數量, b.配達單號, b.實際到貨日, b.預定配達日, b.樓層, b.物流人員, b.備註

From 門市配達表頭檔 As b, 門市配達明細檔 As a

Where 
(b.實際到貨日 Between '2018/01/01' And '2018/01/31'
Or b.預定配達日 Between '2018/01/01' And '2018/01/31')
And a.商品貨號 = '0003732'

小弟欲將 "b.實際到貨日" 或是 "b.預定配達日"為2018一月份,
而且"a.商品貨號 = '0003732'"的資料撈出來,
結果查出來的資料,多出了N筆"商品貨號"為0003732的資料,
而且"數量"欄位還自己填入不對(不該有)的數字,
於是隨便找了一張單號為10701020001去驗證,
此單根本沒有0003732這個貨號,資料不知道怎麼來的,
而且撈出2萬多筆資料太多了,
請問這串語法要修正的是WHERE嗎?或是??
https://ithelp.ithome.com.tw/upload/images/20180209/20011133rzfr9sSX8q.jpg

https://ithelp.ithome.com.tw/upload/images/20180209/20011133yC4b985Aon.jpg

不是奇怪,是你沒有將兩個資料表的關聯欄位做設定,
就像邦友講的: 你要 join 但是要 inner join 還是 left outer join
或是 right outer join,就看你的需求了。
sjzgo iT邦新手 4 級 ‧ 2018-02-09 14:56:09 檢舉
學習了謝謝~

2 個回答

0
做工仔人!
iT邦高手 1 級 ‧ 2018-02-09 13:28:22
最佳解答

Select a.商品貨號, a.訂貨數量, b.配達單號, b.實際到貨日, b.預定配達日, b.樓層, b.物流人員, b.備註

From 門市配達表頭檔 As b left join 門市配達明細檔 As a on a.單號=b.單號

Where
(b.實際到貨日 Between '2018/01/01' And '2018/01/31'
Or b.預定配達日 Between '2018/01/01' And '2018/01/31')
And a.商品貨號 = '0003732'

說明:
二個TABLE 間沒有 JOIN 所造成的

建議改為 INNER JOIN 寫法. 你會比較清楚. 但也許你是想用 FULL JOIN 吧? 呵.

sjzgo iT邦新手 4 級 ‧ 2018-02-09 14:59:15 檢舉

謝謝做工仔人前輩,看來小弟SQL基礎觀念還要加強,沒有想到要做join這點

sjzgo iT邦新手 4 級 ‧ 2018-02-09 15:01:43 檢舉

也謝謝fuzzylee1688前輩

0
erictaiwan
iT邦新手 1 級 ‧ 2018-02-10 11:23:14

建議標題改一下, "SQL撈出奇怪的資料?"
如果是IT專業人員可用 "SQL撈出的資料與規劃的不相符"。

我要發表回答

立即登入回答