假设现在有张账户申请表t_fund_apply,表里有个字段fund_code账户类型。每个账户类型有对应的t_fund_price表。
现在针对对t_fund_apply表,是根据客户不同的选择产生对应的记录,后台再根据apply进行相应的处理。
目前的需求是针对apply表,必须是所有的账户类型都要有t_fund_price记录才允许做。
如果有a , b两个账户,但是只有a账户有t_fund_price,b账户没有。此时无需找出对应的apply记录。
请大神们帮忙设计一下这个sql
t_fund_trans_apply表的数据
select *
from t_fund_trans_apply t
where t.policy_id = 367167
and t.apply_time = date '2016-04-11'
有3条数据:
1 5496334 11 4/11/2016
2 5496335 12 4/11/2016
3 5496336 13 4/11/2016
select t.fund_code, t.pricing_date, t.price_status
from t_fund_price t
where t.fund_code in (11, 12, 13)
and t.pricing_date = date '2016-04-11';
有两条数据:
1 11 4/11/2016 3
2 12 4/11/2016 3
这种由于t_fund_price表没有符合条件的fund_code为13的数据,
所以不应该把t_fund_trans_apply的记录查询出来。
只有t_fund_price中所有fund_code都存在的情况下,需要把t_fund_trans_apply的记录查询出来。
没懂你啥意思,ab账户什么关系?t_fund_apply的fund_code是外键吗,对应t_fund_price的主键?
如果这样为什么ab一个没有t__fund_price就不用查apply,想要知道有没有price就必须查apply啊
把你的想法说清楚,最好加上表结构和期望的输入输出示例:不是描述,是具体到值的示例。
你的意思是查询fund_code同时在两个表里都存在的项么?这个说白了就是多表联合查询,看你写的sql你应该是只会写单表的。多表查询可以直接在FROM后跟两个表,例如
SELECT apply.police_id, apply.apply_time, apply.fund_code
FROM t_fund_trans_apply apply, t_fund_price price
WHERE apply.fund_code = price.fund_code
还可以使用JOIN方法进行多表查询,我暂时不太了解JOIN和FROM的区别,可能是效率优势吧,最好学着用,用JOIN是这么写的
LECT apply.police_id, apply.apply_time, apply.fund_code
FROM t_fund_trans_apply apply
LEFT JOIN t_fund_price price
ON apply.fund_code = price.fund_code
# WHERE ... 针对FROM的表的查找条件写在WHERE中
# JOIN的条件写在ON中
JOIN分为INNER/OUTER JOIN,OUTER JOIN分为LEFT/RIGHT (OUTER) JOIN,搜索结果类似集合的交并补集,相关知识点百度“sql JOIN”第一页就能查到,这里就不列举了。
我这些是按照你提供的东西写出来的,可能和你想要的还有偏差,因为你问题描述的还是不到位:首先你还是没说你最开始ab账户的关系跟你所要的sql有什么联系,我认为这个sql只跟fund_code字段有关;其次你新提供的信息不完整且包含太多不必要的东西,如果还有疑问要把这些信息整理出来:
1.表名1(字段1,字段2,字段3,。。。)
对应的数据(按列对应)
表名2(。。。。)
对应的数据
2.表名1:字段x ==> 表名2:字段1 (外键关系,如果有)
3. 输出:字段1,字段2,字段3.。。。
对应的数据
https://blog.csdn.net/qq_30616169/article/details/50518191
SELECT
*
FROM
t_fund_trans_apply t
WHERE
t.policy_id = 367167
AND t.apply_time = date '2016-04-11'
AND t.fund_code IN ( SELECT t.fund_code FROM t.t_fund_price t WHERE t.pricing_date = date '2016-04-11' GROUP BY t.fund_code )
不知道是不是你想要的