求解答一个sql语句的问题

有两张表,一个文档表,一个案件表

文档表
document (id,case_num,document_name)

案件表
case (id,case_num,case_name,status)
  • 文档表的 case_num 对应多个 案件表的 case_num

  • 文档表的 case_num 格式以 “,号”分隔,例如:

document 表

图片说明

案件表

图片说明

问题是要将两个表的内容加入第三张表里,判断的条件是 document 表的 case_num 字段里的对应的所有 case 表里的记录的 status 都为 '1'

请问这个语句怎么写

直接给几条表记录上来吧,这样光说都不知道数据是怎么样子的

用sql语句应该没办法写,自己写个存储过程函数吧
因为mysql里面没有split函数,没办法把你文档document表里面的字符串化的case_num拆解开来

https://www.cnblogs.com/Claire6649/p/6871935.html

SELECT * FROM case c , document d where c.status = 1 and LOCATE(c.case_num, d.case_num) and c.case_num = 'def';
不知道是不是你想要的

#MySQL 写法
SELECT d.*,COUNT(*) AS d_cnt,SUM(IF(c.status=1,1,0)) AS c_cnt
FROM case c
JOIN document d ON FIND_IN_SET(c.case_num,REPLACE(d.case_num,',',','))
WHERE 1
GROUP BY d.id
HAVING d_cnt=c_cnt

如果你是在hive中的话,你可以document表里面的字符串化的case_num进行split之后,进行行转列,保证一行的case_num只有一个,然后再进行join进行
min(status)=1的判断就好了

第三个表是什么结构呢?比如一个document对应两个case,在第三个表中是一条记录还是两条记录呢?