这是我到目前为止所做的:
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个元组)。我不知所措,因为它看起来应该有效。
感谢。
答案 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
)