Archief - [PROG]SQL Insert met meerdere selects

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Krayola

Legacy Member
Ik probeer in een tabel enkele waarden te inserten. 2 hiervan zijn via selects van 2 andere tabellen en dan nog een derde waarde (true of false).

Code:
insert into Klant(Abonnee, PersID, AccountID) true, select max(PersID), max(AccountID) from Persoon, Account

Zo lukt het dus niet. Weet er iemand hoe dit wel lukt?
Hij geeft namelijk altijd 'incorrect syntax near true'.

killgore

Legacy Member
ten eerste gebruik je te weinig haakjes, ten tweede selecteert je select 2 kolommen en heeft dus geen scalair resultaat.

Ik gok dat je dit wilt:
Code:
INSERT INTO Klant(Abonnee, PersID, AccountID) (true, (select MAX(PersID) FROM Persoon), (SELECT MAX(AccountID) FROM Persoon))

en wat doet die laatste ,Account :x?

edit: en ik weet niet welk db-system gebruikt, maar sql heeft standaard geen boolean ondersteuning!

Krayola

Legacy Member
Euhm. Account en Persoon zijn alle twee verschillende tabellen, hé.
Als ik alleen selects insert:
Code:
insert into Klant(PersID, AccountID) select max(PersID), max(AccountID) from Persoon, Account
Dat werkt dus. Maar nu moet ik nog een derde kolom invullen (van het type 'bit' dus in SQL Server 2005). Dat kan op true of false staan (een abonnee of geen abonnee dus).

passero

Legacy Member
killgore zei:
edit: en ik weet niet welk db-system gebruikt, maar sql heeft standaard geen boolean ondersteuning!

oracle heeft dit wel, maar doen moet je specifiek ook je veld als boolean gedefinieerd hebben. ALs het een numeriek veld is ,zal je wel een error krijgen.

Krayola

Legacy Member
Zoals ik zei is het dus van het type bit (SQL Server 2005) en daar kan true of false in gezet worden.

edit: een insert van true of false kan precies niet gedaan worden.

Krayola

Legacy Member
Ok. Zo'n true of false kunt ge dus wel inserten.
Code:
insert into tabel3 values (3,3,'true');
Zoiets zou het dus moeten zijn. Maar ipv die twee 3's, zou ik 2 selects moeten kunnen doen. Een select uit de ene tabel en een select uit een andere tabel.

killgore

Legacy Member
die 2 selects zijn nochtans wat ik zei, gewoon 2 aparte subqueries.

Kn0t

Legacy Member
Code:
INSERT INTO Klant(Abonnee, PersID, AccountID) 
VALUES ('true', (select MAX(PersID) FROM Persoon), (SELECT MAX(AccountID) FROM Account))

?

Of als je het per sé met de syntax wil doen die je tot nu toe hebt gebruikt (INSERT via SELECT ipv INSERT via VALUES, kan het wss ook wel zo:)

Code:
insert into Klant(Abonnee,PersID, AccountID) select 'true', max(PersID), max(AccountID) from Persoon, Account

Wat je hier dan eigenlijk doet is het resultaat van je select statement gaan inserten in je Klant tabel. Het eerste zal wel veel performanter zijn omdat je door je select from Persoon, Account het carthesisch product maakt tussen de records in beide tabellen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan