我有一个查询,它返回一条记录以及与之相关的各种审批的状态。我只想看到那些有";批准";与记录关联的所有审批的状态。显示状态的字段是t3.status。如果t2.status是从所有加入的记录中"批准"的,那就是我要找的。
看起来很简单,但我不太确定该怎么写。
SELECT *
FROM change_request
JOIN approval t2 ON t2.parentsysid = change_request.sysid
JOIN appuser t3 ON t3.userid = t2.userId
我不知道批准的状态是如何存储在您的数据库中的——我假设有一个名为status的列,值为"批准";。将查询更改为数据库中的存储方式
SELECT *
FROM change_request
JOIN approval t2 ON t2.parentsysid = change_request.sysid
LEFT JOIN non_approve n on n.parentsysid = change_request.sysid and n.status <> 'approved'
JOIN appuser t3 ON t3.userid = t2.userId
WHERE n.parentsysid is null
这是如何工作的——在这里,我们将join留在表中,以查找您不想要的任何情况。然后,我们只选择没有发生连接的情况。这意味着没有你不想要的东西。
您也可以使用NOT EXISTS,但在大多数系统上,速度比此方法慢。