工作上需要,我有兩個表格,其中一個叫 logger, 一個叫 terminals
logger 很單純,會記錄各種 log, 其中一個欄位會記錄來自哪個 terminal mac, 如果它是 terminal 造成的錯誤。
問題在於,terminals 表格是直式的,就是它的欄位像 attribute, value 這樣的型式,譬如
id attribute value
1 mac 123456789012
1 name t1
2 mac 234567890123
2 name t2
如果想在列出 logger 時,對這類 log 印出這條 log 來自哪個 terminal 該怎麼辦?
對mariadb 而言,因為要的是 logger, 所以要用 LEFT JOIN
LEFT JOIN 的意思是,我要表格左邊的結果,但是在某些條件下合併表格資料
所以就像 SELECT l.id,l.date,l.info,IF(l.mac<>'',t2.name,'') as termname FROM logger AS l
LEFT JOIN Terminals AS t1 on
t1.attribute='mac' AND l.mac<>'' AND l.mac=t1.value
LEFT JOIN Terminals AS t2 on
t1.id=t2.id AND t2.attribute='name'
翻譯成中文大概就像:
我要全部的 logger 資料,其中
如果 mac 欄位有值,那就從 Terminals 表格查,其 attribute='mac' 其值為 mac
但是傳回 Terminals 中相同 id 的 terminal 名稱
有點複雜,我也是想很久才清楚,可以這麼說,LEFT JOIN 是以左邊的(LEFT) 語法為結果,加上條件來自(JOIN) 後面的限制
0 意見:
張貼留言