台灣最大程式設計社群網站
線上人數
1544
 
會員總數:243325
討論主題:188102
歡迎您免費加入會員
討論區列表 >> MySQL >> 我想要合併兩個資料表,並且讓空值為0
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
我想要合併兩個資料表,並且讓空值為0
價值 : 100 QP  點閱數:338 回應數:9

樓主

求助者
門外漢
0 1
14 2
發送站內信

我已經建了一個timestamp資料表,將兩個資料表合併後,他還是沒有將空值顯示出來為0,想請你們幫我看一下哪裡出了問題,謝謝,以下是我打的SQL

select timestamps.`COL 1`,ifnull(revisedata.`COL 2`,0) from timestamps left join revisedata on timestamps.`COL 1`=revisedata.`COL 1`;

timestamps是我額外建的資料表,revisedata是我重新排列過的資料表,現在我的timestamps.'CLO 1'時間為2018/1/1 00:00、2018/1/1 00:01、2018/1/1 00:02 、2018/1/1 00:03、 2018/1/1 00:04
revisedata.'CLO 1'為與上列相同,但時間為不連續的,但形式相同,舉例來說,可能為2018/1/1 00:00、2018/1/1 00:03、2018/1/1 01:02,跳著的資訊,revisedata.'CLO 2'是在這個時間內的資料筆數,
所以我現在想將timestamps.`COL 1`和 revisedata.'CLO 2'合併,但revisedata.'CLO 2'如果無法對應timestamps.`COL 1`的時間,仍然要顯示,不過要在revisedata.'CLO 2'這一遍顯示0。
請大家幫幫我,謝謝




搜尋相關Tags的文章: [ My SQL ] , [ MS SQL ] ,
本篇文章發表於2018-08-25 15:37
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

彩虹
檢舉此回應
提醒一下,請善用程式碼標籤~

回歸正題
你要注意到 ifnull 是針對資料值為 NULL 時,才會是 true,並改成 0
如果值為空值 (empty) ,則條件是不會成立的,因為 empty 不等於 NULL

所以你需要改成這樣子的方式 (我有稍微排版一下)

第一種方式,你可以直接使用 if 搭配 is null 與 '',來判斷NULL或empty


第二種方式,使用 case when


另外
我建議一下在資料欄位的命名上,盡量不要有空格或中文名稱的存在
你可以加上底線之類的
COL 1 改成 COL_1
COL 2 改成 COL_2

這樣子會好很多,你就不太需要加上單引號或`,例如
revisedata.`COL 1` 可以直接寫成 revisedata.COL_1

本篇文章回覆於2018-08-25 17:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

彩虹
檢舉此回應
阿,手誤
我把 from timestamps 打成 from tablename

原本是要打範例給你看
後來又改用你的欄位與資料表,結果沒改完整~


所以當你你複製SQL回去的時候,記得改回去成 timestamps

本篇文章回覆於2018-08-25 17:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

求助者
檢舉此回應
謝謝@彩虹的回覆,不過最後用出來的結果還是沒辦法跑出來空值為0,一樣只跑出revisedata有的那幾個時間點的資料
本篇文章回覆於2018-08-25 21:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

彩虹
檢舉此回應
你要不要截圖放上來讓我們看一下
不然沒有辦法對症下藥,你用文字描述,而我們也要很有想像力

所以請提供
1. 兩張表資料的截圖
2. 結合兩張表後的截圖


本篇文章回覆於2018-08-25 22:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

彩虹
檢舉此回應
我剛剛試著把你提問的問題,試著在我本機件好資料表以及資料
執行我上面提供的 SQL 指令,是可以正確地顯示出來
所以你可能真的要提供你的資料表截圖,才有辦法釐清原因

或者可能你有什麼地方有誤解

照理說你加上這一行判斷之後,產生出來新的 NEW_COL_2,就會是你要的結果
你應該要拿 NEW_COL_2 去做你的後續動作


而原本revisedata.'CLO 2' 是不會被變動的,這點你必須要釐清一下

所以當你

本篇文章回覆於2018-08-25 22:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

求助者
檢舉此回應
https://imageshack.com/a/img922/5792/ultwlo.jpg
https://imageshack.com/a/img922/8401/4w2VP0.jpg
https://imageshack.com/a/img923/809/aYIVhw.jpg
https://imageshack.com/a/img921/2562/tIgXb1.jpg

麻煩你們了,看不清楚我會馬上回復的
本篇文章回覆於2018-08-25 22:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

彩虹
檢舉此回應
你用站內信發訊息給我,看你有什麼可以聯絡的方式,溝通上會比較快
例如 LINE 或 SKYPE等等,有的話請提供給我加你的方式

等解決問題後,我們再把最後結果回覆上來
本篇文章回覆於2018-08-25 22:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

彩虹
檢舉此回應
剛剛有發現你很早就有寄站內信給我,我剛剛回復你囉~
你可以把你的資料匯出 SQL檔案給我,然後放到你的 google 雲端讓我下載
本篇文章回覆於2018-08-25 22:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
最有價值解答

彩虹
檢舉此回應
結論:

結合資料表後,資料其實一直是正確的
只是因為沒有做排序,所以發問者以為資料是不對的XDD

所以在後面加上 order by timestamps.`COL 1` ASC

如下

本篇文章回覆於2018-08-26 00:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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