我有三张桌子:
博士组
身份证件
名称
文档类型
身份证件
文档组id
名称
医生
身份证件
证件类型
名称
日期
我只想从Doc_组中检索其所有Doc的日期都小于90天的行。
例子:
博士组
+-----------------+
|身份证|姓名|
+-----------------+
|1 |医生组1|
+-----------------+
|2 |医生组2|
+-----------------+
|3 |医生组3|
+-----------------+
文档类型
+--------------------------------+
|id |姓名|医生组id|
+--------------------------------+
|1 |医生|类型| 1|
+--------------------------------+
|2 |医生|类型| 1|
+--------------------------------+
|3 |医生|类型| 2|
+--------------------------------+
文件:
+---------------------------------------+
|身份证|姓名|证件|类型|身份证|日期|
+---------------------------------------+
|2012年10月1日|
+---------------------------------------+
|2012年9月1日|
+---------------------------------------+
|3 | doc|u 3 | 3 | 2012年10月1日|
+---------------------------------------+
|2014年7月26日|
+---------------------------------------+
结果:
只应返回doc_group_1,因为它的所有文档都少于90天。
doc_group_2不符合doc_4的条件不少于90天
博士组
+-----------------+
|身份证|姓名|
+-----------------+
|1 |医生组1|
+-----------------+
我试过分组,但我没能得到我想要的结果。
谢谢
最佳答案
以下是您要查找的查询:
SELECT DG.*
FROM Doc_group DG
WHERE NOT EXISTS (SELECT D.id
FROM Doc D
WHERE D.doc_group_id = DG.id
AND D.date < DATEADD(DAY, -90, GETUTCDATE()))
这是T-SQL中的一个解决方案,我不确定MySQL的版本。
希望这对你有帮助。
快速搜索后,以下是MySQL版本的查询:
SELECT DG.*
FROM Doc_group DG
WHERE NOT EXISTS (SELECT D.id
FROM Doc D
WHERE D.doc_group_id = DG.id
AND D.date < DATE_SUB(CURDATE(), INTERVAL 90 DAY))
我没有任何MySQL数据库来测试此查询,但它应该可以工作;-)
关于mysql - SQL从父表返回条件与子表的另一个子表匹配的所有行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25513027/