SQL语句联表查询

两个表A和B,A表如下:A_idnameitem(项目)need_pay(需付金额)101张三a300102张三b200103李四a500……表B如下:B_idA_idm... 两个表A和B,
A表如下:
A_id name item(项目) need_pay(需付金额)
101 张三 a 300
102 张三 b 200
103 李四 a 500
……

表B如下:
B_id A_id money(已交金额)
201 101 100
202 101 150
203 101 50
204 102 200
……

就是说,A表中定义了需要交费的项目,但每个项目的缴费可以分多次付款。

现在要查找所有符合以下条件的记录:
B表中一个项目下的多次付款总和 不等于 A表所定义的需付金额
结果显示A表的字段
展开
 我来答
nietiezheng
推荐于2017-09-14 · TA获得超过5536个赞
知道大有可为答主
回答量:3132
采纳率:87%
帮助的人:1218万
展开全部
select A.A_id
from A,(select A_id, sum(money+ticket) as allpay from B group by A_id ) as C
where A.need_pay <> C.allpay and A.A_id =C.A_id
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2013-01-19 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5150万
展开全部
select a.*,a.need_pay-isnull(b.paied,0) as 还需交付 from a left join
(select a_id,sum(money)as paied from b group by a_id)b on a.a_id=b.a_id
where a.need_pay-isnull(b.paied,0)>0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qiu知问答
2015-11-17
知道答主
回答量:43
采纳率:0%
帮助的人:2.8万
展开全部
select A.A_id
from A,(select A_id, sum(money+ticket) as allpay from B group by A_id ) as C
where A.need_pay <> C.allpay and A.A_id =C.A_id
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tjrmgs
2013-01-19 · TA获得超过5765个赞
知道大有可为答主
回答量:2161
采纳率:94%
帮助的人:1034万
展开全部
代码思路:
假设A、B两表为一对多关系。
首先对B表用字段A_id分组,求得每个小组的付款总和获得子查询表t,再用t表与A表进行基于A_id字段实施等同连接,筛选出付款总和小于需付金额的那些A_id,最后以这个得到的A_id列表用in 子句对B表实施筛选,从而都得到最终结果。

select * from B where A_id
in (select A.A_id from A,
(select A_id,sum(money) as sum_pay from B group by A_id) t
where A.A_id=t.A_id and A.need_pay>t.sum_pay)

注意在比较需付金额和付款总额时,我使用了“大于”而不是“不等于”“A.need_pay>t.sum_pay”。
如果楼主需要将付款总额大于需付金额的那些记录于也显示出来的话,则可以使用“<>”不等于比较符。

不好意思,我看漏了问题补充。楼主也许还需要除B表字段外,同时输出A表的name、Item和need_pay字段

select B. B_id, A.A_id, A.name, A.item, A.need_pay, B.money from A,B
where A.A_id=B.A_id and B.A_id
in (select A.A_id from A,
(select A_id,sum(money) as sum_pay from B group by A_id) t
where A.A_id=t.A_id and A.need_pay>t.sum_pay)

只显示符合条件的A表记录
select * from A where A_id
in (select A.A_id from A,
(select A_id,sum(money) as sum_pay from B group by A_id) t
where A.A_id=t.A_id and A.need_pay>t.sum_pay)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式