我需要检查每个项目的步骤是在项目的开始和结束日期之间完成的(编写一个查询,让人知道是否是这种情况)
这是我的密码:
SELECT e.idetape,
e.idprojet,
e.datedebut,
e.datefin
FROM (SELECT idprojet,
datedebut,
datefin
FROM projet) AS p
LEFT JOIN etapexprojet AS e
ON e.datedebut < p.datedebut
AND e.datefin < p.datefin
ORDER BY idprojet;
etapexprojet表(etapexprojet表中还有其他日期):
+---------+----------+-------------+--------------+--+
| idEtape | idProjet | dateDebut | dateFin | |
+---------+----------+-------------+--------------+--+
| 1 | 1 | 2011-07-01 | 2011-09-01 | |
| 1 | 2 | 2012-05-01 | 2012-05-10 | |
| 1 | 3 | 2011-11-01 | 2012-01-20 | |
| 2 | 1 | | | |
| 2 | 2 | | | |
| 2 | 3 | | | |
| 3 | 1 | | | |
| 3 | 2 | | | |
| 3 | 3 | | | |
| 4 | 1 | | | |
| 4 | 2 | | | |
| 5 | 2 | | | |
+---------+----------+-------------+--------------+--+
项目表:
+----------+----------+-----------+------------+------------+---------------+--+
| idProjet | idClient | nomProjet | dateDebut | dateFin | idResponsable | |
+----------+----------+-----------+------------+------------+---------------+--+
| 1 | 321 | Devl. | 2011-08-01 | | 1876 | |
| 2 | 321 | Maint. | 2012-05-01 | 2012-07-23 | 2231 | |
| 3 | 345 | Devl.2 | 2011-11-01 | | 2231 | |
+----------+----------+-----------+------------+------------+---------------+--+
我的预期结果是检查/验证每个idetape的开始日期和结束日期是否在相关项目的开始日期和结束日期之间。
2条答案
按热度按时间pgx2nnw81#
您不需要使用派生表(sub-select查询),因为您不需要在
projet
table。我相信你只关心
idetape
位于projet
的datedebut
以及datefin
.你可以改变
Left Join
至Inner Join
基于上述观点。我还增加了要检查的案件的范围,因为有可能
datefin
存在NULL
在任何一张table上。请尝试以下操作:
7jmck4yq2#
请尝试以下代码: