sql 语句问题

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

文档表
document (id,case_num,document_name)

案件表
case (id,case_num,case_name,status)

文档表的 case_num 对应多个 案件表的 case_num
文档表的 case_num 格式以 “,号”分隔,例如:

A001,A002

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

请问这个语句怎么点

阅读 1.9k
2 个回答

这个不好写,如果硬要写,需要先把document表里的case_num字符串取出来,在程序里遍历,遍历中每个去查询case表。

如果可以的话,重新表结构。一般这种关系用中间表表达。

document(id,document_name)
case(id,case_name,status)
# 中间表
document_case(id,document_id,case_id)

然后这样查询

SELECT * FROM document d JOIN document_case dc ON d.id = dc.document_id JOIN `case` c ON dc.case_id = c.id WHERE d.id not in (SELECT dc2.document_id FROM `case` c2 JOIN document_case dc2 ON c2.id = dc2.case_id WHERE c2.status = 0)

建议调整表结构。
你在一个字段里存储多个值,实际上违反了数据库设计第一范式的原则。
如果该字段本身不参与什么运算,只是单纯的存储,那么这里反范式一下没太大问题。

但你这里明显已经是参与计算了。所以如果对性能和数据一致性比较大,建议还是向楼上那位兄弟建议的那样,调整一下表结构。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题