![](/img/trans.png)
[英]Returning all parent table rows but return null for child table rows that don't match the WHERE clause with MYSQL
[英]Sql return all rows from parent table where criteria match from another child of a child table
我有3張桌子:
Doc_group
doc_type
文件
我只想從Doc_group檢索其所有文檔的日期都少於90天的行。
示例: Doc_group
+-----------------+ | id | name | +-----------------+ | 1 | doc_group_1 | +-----------------+ | 2 | doc_group_2 | +-----------------+ | 3 | doc_group_3 | +-----------------+
Doc_type
+--------------------------------+ | id| name | doc_group_id | +--------------------------------+ | 1 | doc_type_1 | 1 | +--------------------------------+ | 2 | doc_type_2 | 1 | +--------------------------------+ | 3 | doc_type_2 | 2 | +--------------------------------+
文件 :
+---------------------------------------+ | id| name | doc_type_id | date | +---------------------------------------+ | 1 | doc_1 | 1 |01/10/2012 | +---------------------------------------+ | 2 | doc_2 | 2 |01/9/2012 | +---------------------------------------+ | 3 | doc_3 | 3 |01/10/2012 | +---------------------------------------+ | 4 | doc_4 | 3 |26/07/2014 | +---------------------------------------+
結果:僅doc_group_1應該返回,因為其所有文檔都少於90天。 doc_group_2沒有資格作為doc_4不少於90天Doc_group
+-----------------+ | id | name | +-----------------+ | 1 | doc_group_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數據庫可以測試此查詢,但它應該可以工作;-)
select dg.id, dg.name
from Doc_group dg
where dg.id not in
(
select d.doc_group_id
from Doc d
where d.date NOT BETWEEN DATEDIFF(NOW() - 90 days) AND NOW()
)
SELECT *
FROM Doc_group DG
INNER JOIN Type_group TG ON DG.ID = TG.doc_group_id
INNER JOIN Doc D ON DG.doc_group_id = D.doc_group_id
WHERE D.date BETWEEN NOW() - INTERVAL 90 DAY AND NOW()
我不確定您想要什么,但是請嘗試以下操作:
SELECT dg.*
FROM Doc_group AS dg
INNER JOIN Doc AS d ON dg.id = d.doc_group_id
WHERE d.date BEETWEEN DATEDIFF(NOW() - 90 days) AND NOW()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.