SELECT woanders INSERTen

Hallo,

ich stolpere nur so leidlich SQL, also sorry, falls meine Frage einfaeltig ist.

In meiner supertollen Applikation, dem Sportwagen-Manager, habe ich eine Tabelle ‚cars‘ mit meinen Autos und eine weitere ‚drivers‘ mit den Fahrernamen. In beiden Tabellen ist eine eindeutige numerische ID vorhanden. In einer weiteren Tabelle ‚car_driver_rel‘ verknuepfe ich per IDs diejenigen Fahrer, die ein jeweiliges Auto fahren duerfen. (Zwischenfrage: macht man das eigentlich so? Oder sollte man solche nm-Relationen anders abbilden?)

Jetzt der knifflige Teil: ich moechte einfuegen, dass all diejenigen Fahrer, die sowieso schon den Ferrari fahren duerfen das auch mit dem Porsche duerfen. Also waeren

mysql\> select (select id from cars where name = "Porsche") as carid, driverid from car\_driver\_rel where carid = (select id from cars where name = "Ferrari");
+-------+----------+
| carid | driverid |
+-------+----------+
| 1874 | 11 |
| 1874 | 21 |
| 1874 | 50 |
| 1874 | 80 |
| 1874 | 82 |
| 1874 | 90 |
| 1874 | 105 |
| 1874 | 109 |
| 1874 | 111 |
| 1874 | 133 |
+-------+----------+ 
10 rows in set (0.00 sec)

die Daten, die ich einfuegen muesste. Gesagt, getan:

mysql\> insert into car\_driver\_rel (carid, drivreid) values (select (select id from cars where name = "Porsche") as carid, driverid from car\_driver\_rel where carid = (select id from cars where name = "Ferrari"));
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select (select id from cars where name = "Porsche"), driverid from dri' at line 1

Hm, MySQL ist da wohl anderer Meinung. Was mache ich falsch? Geht das so gar nicht? Muss ich fuer jedes Wertepaar nochmal ein SELECT nach der id vom Porsche reinschreiben? (Was ich ziemlich unelegant empfaende…)

Danke im Voraus,
Gruss vom Frank.

Hallo,

(Zwischenfrage: macht man
das eigentlich so? Oder sollte man solche
nm-Relationen anders abbilden?)

Was mache ich falsch?
Geht das so gar nicht? Muss ich fuer jedes Wertepaar nochmal
ein SELECT nach der id vom Porsche reinschreiben? (Was ich
ziemlich unelegant empfaende…)

Danke im Voraus,
Gruss vom Frank.

Hallo Frank,

Ich muss zugeben dass ich schon zu lange von mySQL weg bin um sicher sagen zu können, ob ich den Fehler richtig erkannt habe. Allerdings müsstest das ganze meines Wissen so aussehen:

insert into car_driver_rel (carid, drivreid)
select (select id from cars where name = „Porsche“) as
carid, driverid from car_driver_rel where carid = (select id
from cars where name = „Ferrari“);

also VALUES und Klammern um den SELECT weglassen, wenn du per SELECT mehrere Datenzeilen einem INSERT zuweisen möchtest.

zu deiner Zwischenfrage(n m)ist meiner Meinung nach der gängige weg das so abzubilden. Deshalb denke ich, dass das so passt.