[SQL ] subselect 想要傳回多欄位要如何改?
資料庫名稱: MySQL
資料庫版本: 5.X
內容/問題描述:
小弟最近由xbase轉到mysql
一些觀念不太清楚。
Table a 基本檔
--------------------
chno(primary)
chnm
pice
samt
...
Table b 月用量檔
----------------
chno (此兩欄為primary)
yymm (此兩欄為primary)
tamt
iamt
oamt
lamt
....
月份檔不一定每個chno+ymmm都有(無進也無出則此月無記錄)
假設想列出1603月的月報(若不存在則取之前最近的月份)
^^^^^^^^^^^^^^^^^^^^^^^^^^
目前想到的語法是:
SELECT chno, chnm, pice, samt, (
SELECT LAMT, IAMT, OAMT, TAMT... FROM b
WHERE b.chno = a.chno AND yymm <= '1603'
ORDER BY yymm DESC
LIMIT 1
)
FROM a
WHERE chno >= '50000' AND chno <= '5ZZZZ'
好像不對是吧,mysql說只可以有一個欄位。
用left join嗎?
但 "若不存在則取之前最近的月份" 的where要怎麼寫呢?
每個欄位都要加IFNULL(cloumnx,0) 也梃麻煩,
有整體性的令NULL = 0 嗎?
若有問錯觀念,請多加鞭策XD
謝謝大家!
--
04/18 22:46補充
目前試出下面的語法,
是能得到想要的結果了,
不知還有改進的空間嗎?
select a.chno
,a.chnm
,a.pice
,a.samt
...
,IFNULL(max(b.yymm),'') as yymm
,IFNULL(b.tamt,0) as tamt
,IFNULL(b.iamt,0) as iamt
,IFNULL(b.oamt,0) as oamt
,IFNULL(b.lamt,0) as lamt
...
from a
left join b
on a.chno=b.chno and b.yymm<='1603'
group by chno
-----------------------------------
04/19 15:31補充
結果是錯的,yymm是我想要的,其他(tamt,iamt,oamt,lamt)確是不確定的任一筆。
對於a中的每一筆,我想要的b是:
SELECT *
FROM b
WHERE chno = '0505' //(a.chno)
AND yymm <= '1603'
ORDER BY yymm DESC
LIMIT 1
取得不大於'1603'的最新紀錄
還想不通如何合併sql命令。
※ 編輯: jonce007 (61.216.136.100), 04/19/2016 15:25:09
→
04/20 11:18, , 1F
04/20 11:18, 1F
Database 近期熱門文章
PTT數位生活區 即時熱門文章