我正在努力查询。
我有三张表偏差:可以有多个测量值Measure_sources:偏差与度量的关系表措施
这里,我想在与偏差相关的每个测量上检查这一点Due_at> currentdate:应该可见due_at & lt;当前日期:未显示
偏差表
id name
1 abc
2 def
度量源表
id element_id measure_id
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
措施表
id due_at
1 2015-10-14
2 2015-12-30
3 2016-11-30
预期的结果
id
2
目前我正在使用下面的查询,但我得到了不应该出现的偏差
SELECT d.id FROM deviations d
LEFT JOIN measure_sources ms ON ms.element_id = d.id
LEFT JOIN measures m ON ms.measure_id = m.id
WHERE (m.due_at > '2016-08-15' OR m.due_at is null)
但目前我得到1和2的结果请指出我错在哪里
谢谢
我不明白你是什么问题。但是,我可以看到这个查询有一个很大的潜在问题。一般来说,当使用left join
时,除第一个表之外的所有表的条件都应该在on
子句中。
也许这会解决你的问题:
SELECT d.id
FROM deviations d LEFT JOIN
measure_sources ms
ON ms.element_id = d.id LEFT JOIN
measures m
ON ms.measure_id = m.id AND
m.due_at > '2016-08-15' ;
你不需要LEFT JOIN
s,但INNER
(加DISTINCT
):
SELECT DISTINCT d.id FROM deviations d
JOIN measure_sources ms
ON ms.element_id = d.id
JOIN measures m
ON ms.measure_id = m.id
WHERE m.due_at > '2016-08-15'
如果你不需要deviations
的额外列,你可以删除一个join:
SELECT DISTINCT ms.element_id
FROM measure_sources ms
JOIN measures m
ON ms.measure_id = m.id
WHERE m.due_at > '2016-08-15'