查询表A中满足这些条件的数据:存在两条数据的dh相同,且一条数据的je字段小于0,另一条数据的je字段大于0,且这两条数据不存在表C的ys等于表A的dh,且这两条数据的je字段合计为0
时间: 2024-03-09 18:50:46 浏览: 17
可以使用如下 SQL 语句来查询表A中满足这些条件的数据:
```sql
SELECT a.*
FROM A a
WHERE a.dh IN (
SELECT dh
FROM A
WHERE je < 0
GROUP BY dh
HAVING COUNT(DISTINCT dh) = 2
)
AND a.je > 0
AND NOT EXISTS (
SELECT 1
FROM C
WHERE ys = a.dh
)
AND a.dh NOT IN (
SELECT dh
FROM A
WHERE je > 0
GROUP BY dh
HAVING COUNT(DISTINCT dh) = 2
AND SUM(je) = 0
)
```
解释一下上面的 SQL 语句:
首先,子查询 `SELECT dh FROM A WHERE je < 0 GROUP BY dh HAVING COUNT(DISTINCT dh) = 2` 用于找到在表A中有两条数据的dh相同且其中一条数据的je小于0,另一条数据的je大于0的记录的dh值。这个子查询返回的结果会作为外层查询的一个条件。
然后,`a.je > 0` 用于筛选出je大于0的记录。
接着,`NOT EXISTS (SELECT 1 FROM C WHERE ys = a.dh)` 用于排除掉在表C中ys等于表A的dh的记录。
最后,`a.dh NOT IN (SELECT dh FROM A WHERE je > 0 GROUP BY dh HAVING COUNT(DISTINCT dh) = 2 AND SUM(je) = 0)` 用于排除掉在表A中有两条数据的dh相同且这两条数据的je字段合计为0的记录的dh值。