Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 筛选自联接并仅包括与嵌套联接不匹配的行_Sql_Postgresql_Subquery_Left Join_Where Clause - Fatal编程技术网

Sql 筛选自联接并仅包括与嵌套联接不匹配的行

Sql 筛选自联接并仅包括与嵌套联接不匹配的行,sql,postgresql,subquery,left-join,where-clause,Sql,Postgresql,Subquery,Left Join,Where Clause,我有以下伪表:postgresql Payment id: number; groupId: number; status: [Pending|Executed]; PaymentLog id: number; paymentId: number; date: Date; // YYYY-DD-MM 获取所有待处理的付款 但如果PaymentLog中的一行引用同一groupId下的付款并匹配特定日期,则排除付款 我试过类似的东西 SELECT

我有以下伪表:postgresql

Payment
    id: number;
    groupId: number;
    status: [Pending|Executed];

PaymentLog
    id: number;
    paymentId: number;
    date: Date; // YYYY-DD-MM
获取所有待处理的付款 但如果PaymentLog中的一行引用同一groupId下的付款并匹配特定日期,则排除付款 我试过类似的东西

SELECT p1.id FROM Payment
JOIN Payment p2 ON p1.groupId = p2.groupId
LEFT JOIN PaymentLog p3 ON p2.id = p3.paymentId AND date = '2020-09-06'
WHERE
   p3.id IS NULL
GROUP BY p2.id
但是,如果PaymentLog在引用与日期不匹配的付款时有与groupId匹配的项目,则此项也将匹配。

我怀疑您希望的项目不存在:


我将在不存在的条件下执行此操作:

select p.id
from payment p
where p.status = 'Pending'
and not exists (select *
                from paymentlog log 
                  join payment p2 on log.paymentid = p2.paymentid
                where log.groupid = p.groupid
                  and p2.id <> p.id
                  and log."date" = date '2020-09-06')
临时工 从付款中选择p1.id 在p1.groupId=p2.groupId上加入付款p2 -是。。。。 -如果需要,在这里分组。或DISTINCTp1.id 从temp t中选择id t.id=p3.paymentId上的左连接PaymentLog p3 哪里 日期='2020-09-06'且p3.id为空
select p.id
from payment p
where p.status = 'Pending'
and not exists (select *
                from paymentlog log 
                  join payment p2 on log.paymentid = p2.paymentid
                where log.groupid = p.groupid
                  and p2.id <> p.id
                  and log."date" = date '2020-09-06')