如果表B元组的主键在元组A

时间:2017-02-27 05:14:43

标签: postgresql insert

这是我到目前为止所做的:

INSERT INTO Tenants (LeaseStartDate, LeaseExpirationDate, Rent, LeaseTenantSSN, RentOverdue)
SELECT CURRENT_DATE, NULL, NewRentPayments.Rent, NewRentPayments.LeaseTenantSSN, FALSE from NewRentPayments
WHERE NOT EXISTS (SELECT * FROM Tenants, NewRentPayments WHERE NewRentPayments.HouseID = Tenants.HouseID AND 
NewRentPayments.ApartmentNumber = Tenants.ApartmentNumber)

因此,HouseID和ApartmentNumber一起组成了主键。如果表B(NewRentPayments)中存在基于主键在表A(租户)中不存在的元组,则需要将其插入到租户中。

问题是,当我运行查询时,它不会插入任何内容(我知道事实上应该插入1个元组)。我不知所措,因为它看起来应该有效。

感谢。

1 个答案:

答案 0 :(得分:1)

您的子查询没有相关性 - 它只是一个非相关的连接查询。

根据您的问题说明,您不需要此加入。

试试这个:

insert into Tenants (LeaseStartDate, LeaseExpirationDate, Rent, LeaseTenantSSN, RentOverdue)
select current_date, null, p.Rent, p.LeaseTenantSSN, FALSE
from NewRentPayments p
where not exists (
        select *
        from Tenants t
        where p.HouseID = t.HouseID
            and p.ApartmentNumber = t.ApartmentNumber
        )