作者jonce007 (汪汪)
看板Database
标题[SQL ] subselect 想要传回多栏位要如何改?
时间Mon Apr 18 15:27:21 2016
资料库名称: 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
1F:→ jonce007: 目前用暴力法,先select a, 前端再逐笔slect 所需的b :( 04/20 11:18