BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #4249同步于 2010/3/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

关联子查询的问题

bygones
2010/3/5镜像同步6 回复
有这么个表Loans,有三个属性loan_nbr , payment_nbr , payment_status ,其中loan_nbr 和payment_nbr为复合主键, 现在我要找出所有状态为‘F’,也就是payment_status 全为‘F’的所有loan_nbr。 +----------+-------------+----------------+ | loan_nbr | payment_nbr | payment_status | +----------+-------------+----------------+ | 1 | 1 | F | | 1 | 2 | F | | 1 | 3 | s | | 2 | 1 | u | | 3 | 1 | F | +----------+-------------+----------------+ 我在mysql里用关联子查询: mysql> select distinct (select L1.loan_nbr from Loans AS L1 where L1.loan_nbr=L2.loan_nbr group by L1.loan_nbr having count(L1.payment_status) = count(L2.loan_nbr)) as parent from Loans as L2 where L2.payment_status='F' group by L2.loan_nbr; 思路就是先找出payment_status='F'的所有行,然后在子查询中与Loan对比,只要他们的count相等,就取出该行,但是这个语句得出的结果总是null,不知道为什么? 注:这是在《sql编程风格》里的一个例子,我知道该需求有更好的实现办法,但是我就是想弄明白这个关联子查询的方法为什么不行?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
bygones机器人#1 · 2010/3/5
继续等!
bygones机器人#2 · 2010/3/10
up,希望有人能给点启发,我还是没整明白,是不是mysql对于标量子查询中使用group by有限制? 多谢了!
coolfantasy机器人#3 · 2010/3/10
SELECT DISTINCT(loan_nbf) WHERE payment_status = 'F'; 【 在 bygones (雪地撒野) 的大作中提到: 】 : 标 题: 关联子查询的问题 : 发信站: 北邮人论坛 (Fri Mar 5 14:04:47 2010), 站内 : : 有这么个表Loans,有三个属性loan_nbr , payment_nbr , payment_status ,其中loan_nbr 和payment_nbr为复合主键, 现在我要找出所有状态为‘F’,也就是payment_status 全为‘F’的所有loan_nbr。 : +----------+-------------+----------------+ : | loan_nbr | payment_nbr | payment_status | : +----------+-------------+----------------+ : | 1 | 1 | F | : | 1 | 2 | F | : | 1 | 3 | s | : | 2 | 1 | u | : | 3 | 1 | F | : +----------+-------------+----------------+ : : 我在mysql里用关联子查询: : mysql> select distinct : (select L1.loan_nbr : from Loans AS L1 : where L1.loan_nbr=L2.loan_nbr : group by L1.loan_nbr : having count(L1.payment_status) = count(L2.loan_nbr)) : as parent : from Loans as L2 : where L2.payment_status='F' : group by L2.loan_nbr; : : 思路就是先找出payment_status='F'的所有行,然后在子查询中与Loan对比,只要他们的count相等,就取出该行,但是这个语句得出的结果总是null,不知道为什么? : : 注:这是在《sql编程风格》里的一个例子,我知道该需求有更好的实现办法,但是我就是想弄明白这个关联子查询的方法为什么不行? : -- : : ※ 修改:·bygones 于 Mar 5 14:08:48 2010 修改本文·[FROM: 2001:da8:215:8813:8165:ffc:a700:*] : ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 2001:da8:215:8813:8165:ffc:a700:*]
bygones机器人#4 · 2010/3/10
你这个查询的是含有payment_status = 'F'的loan_nbf,你会把loan_nbf为1的行也选出来的!我要的是所有payment_status 都是‘F’的loan_nbf。 我给出的这个查询其实是书上的原例,但是我输进mysql后发现有问题,所以就拿上来问问,其实这个东西可以用更简单的方法做,直接利用max(payment_status )=min(payment_status ) and max(payment_status )='F'就可以了,只不过我想知道书上这个例子错在哪儿了。 【 在 coolfantasy 的大作中提到: 】 : SELECT DISTINCT(loan_nbf) WHERE payment_status = 'F';
coolfantasy机器人#5 · 2010/3/11
那考虑一下 NOT IN 吧
bygones机器人#6 · 2010/3/12
多谢,不过其实方法是有的,比如下面这个: select loan_nbr from Loans where max(payment_status )=min(payment_status ) and max(payment_status )='F' 就可以了,只是我想知道group by是否不能用在标量子查询里,因为我以后可能会用到标量子查询中使用group by的情况,所以得先确认下到底能不能这么做。 【 在 coolfantasy 的大作中提到: 】 : 那考虑一下 NOT IN 吧