MSSQL INSERT Befehl Problem


EuroCent

Erfahrenes Mitglied
Hallo zusammen,

ich versuche in meine Datenbank einige Einträge zu schaffen, dabei übergebe ich ein Array welches verschiedene IDs enthält.
Nun sollen aber nicht alle IDs genutzt werden, sondern nur die die nicht doppelt sind.

Sprich: array(5,5,6,6,1,2,8) => array(5,6,1,2,8)

Mittels einen Insert Befehl kann Ich ja folgendes machen:
SQL:
INSERT INTO table_a (field_1, field_2, field_3)
SELECT field_1, field_2, field_3 FROM table_b WHERE field_1 IN(5,5,6,6,1,2,8)
GROUP BY field_1, field_2, field_3
Meine Frage ist aber wie bekomme Ich folgendes beispiel korrekt hin:
SQL:
INSERT INTO table_a (field_1, field_2, field_3) VALUES('1', (SELECT field_2 FROM table_b WHERE field_2 IN(5,5,6,6,1,2,8) GROUP BY field_2), '1')
Hier bekomme Ich folgenden Fehler:
Code:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
Ich weiß dass Ich auch mit array_unique arbeiten kann, um vorweg die doppelten Einträge im Array raus zu schmeißen, mein Problem ist aber die Abfrage im Allgemeinen. :)
 

Zvoni

Erfahrenes Mitglied
SELECT DISTINCT?

EDIT: Du widersprichst dir.
Du schreibst es sollen nur die ID's genutzt werden, welche nicht doppelt sind.
In deinem Beispiel dürften ID 5 und 6 nicht benutzt werden, sondern nur 1, 2 und 8

EDIT2: Ist das ein Schreibfehler im zweiten Query? "WHERE field_2 IN (5,5......"
Muss das nicht "field_1 IN (5,5...)" heissen?
 

EuroCent

Erfahrenes Mitglied
SELECT DISTINCT?

EDIT: Du widersprichst dir.
Du schreibst es sollen nur die ID's genutzt werden, welche nicht doppelt sind.
In deinem Beispiel dürften ID 5 und 6 nicht benutzt werden, sondern nur 1, 2 und 8

EDIT2: Ist das ein Schreibfehler im zweiten Query? "WHERE field_2 IN (5,5......"
Muss das nicht "field_1 IN (5,5...)" heissen?
Inwiefern widerspreche ich mich da!
Es geht dabei lediglich darum um zu verhindern dass keine Zahl indem Fall die ID doppelt vorkommt

Nein kein Schreibfehler, da es nur um ein Beispiel handelt :)

Ich habe es jedoch dann anders gelöst, nämlich die IDs vorher aus dem Array zu filtern!

Aber wie genau meinst du es mit Select Distinct?
Wie müsste die Abfrage dann im groben lauten ? :)
 

Zvoni

Erfahrenes Mitglied
Das Sub-SELECT innerhalb von VALUES-blabla.
Dein Problem ist, dass du 2 (oder mehr) Ergebnis-Sets bekommst aus dem SELECT (und genau das besagt deine Fehlermeldung).
Ich wunder mich mehr über dein GROUP BY dort drin (ohne Aggregat-Funktion? Wie funktioniert denn das?)
Aircode:
VALUES ('1', SELECT DISTINCT field_2 blablablabla --> Kein GROUP BY!

EDIT: Wobei du ja es gelöst hast, indem du das Array verdichtet hast (keine Duplikate). Von daher....
 

Neue Beiträge