2017-02-26 4 views
1

ein anderes Formular auswählen. Betrachten Sie die folgende Beziehung.Fügen Sie in eine Tabelle ein, indem Sie unter Bedingung

enter image description here

Ich versuche, neue Zeile in Tenants von NewRentPayments hinzufügen, wenn keine Tenants ‚s Tupel in NewRentPayments Basis Verbundprimärschlüssel houseid und apartmentnumber gefunden.

Werfen Sie einen Blick in meine Anfrage erhalten Sie bessere Idee auf as newval

insert into Tenants(houseid, apartmentnumber, leasetenantssn, leasestartdate, leaseexpirationdate, rent, lastrentpaiddate, rentoverdue) 
(
    select n.* from NewRentPayments as n left join Tenants as t 
    on 
    t.houseid = n.houseid 
    and 
    t.apartmentnumber = n.apartmentnumber 
    where 
    t.houseid is null 
    or 
    t.apartmentnumber is null 
) as newval 
(newval.houseid, newval.apartmentnumber, newval.leasetenantssn, now(), NULL, newval.rent, newval.datepaid, 'f'); 

Es gibt Fehler haben.

ERROR: syntax error at or near "as" 
LINE 12:) as newval 
     ^
********** Error ********** 

ERROR: syntax error at or near "as" 
SQL state: 42601 
Character: 345 

Hinweis: Dies ist kein einfacher Einsatz Wert in einer Tabelle aus einer anderen Tabelle als here getan. In meinem Fall füge ich auch einige Konstanten/benutzerdefinierte Werte in die Tenants Zeilen ein, während NewRentPayments Tupel eingefügt werden.

Ich benutze Postgresql.

Antwort

1

Sie müssen die Werte so eingeben, wie Sie sie einfügen möchten.

Versuchen Sie folgendes:

insert into Tenants (houseid, apartmentnumber, leasetenantssn, leasestartdate, leaseexpirationdate, rent, lastrentpaiddate, rentoverdue) 
select newval.houseid, newval.apartmentnumber, newval.leasetenantssn, now(), null, newval.rent, newval.datepaid, 'f' 
from (
    select n.* 
    from NewRentPayments as n 
    left join Tenants as t on t.houseid = n.houseid 
     and t.apartmentnumber = n.apartmentnumber 
    where t.houseid is null 
     or t.apartmentnumber is null 
    ) as newval; 
Verwandte Themen