mysql, insert into … (select ….

Jaja, ik hoor sommige mensen al weer gniffelen…. Ik ben bezig om voor een site een insert into te bouwen die een select nodig heeft uit een andere tabel. Nu zou je verwachten dat een insert into foo( blabla, blabla2) values (select andere_blabla, nogeenandere_blabla2 from bar) wel zou werken. Maar nee hoor. Moet je met rare constructies werken….

insert into foo ( select null, id, ‘blabla’ as aliasnaam, null, null from bar where parametername = ‘nogmeernonsens’)

Je bent dus blijkbaar verplicht om zoveel velden te selecteren als je al in tabel foo hebt zitten. Nu was het voor mij nog geen probleem aangezien ik een alias naam kon invullen die ik dynamisch kon kiezen. Echter, wat als 1 van de nullwaardes aan iets anders moet voldoen?

Wellicht toch maar eens gaan kijken of zulke constructies in PostgreSQL beter kunnen…

Tagged: ,

3 thoughts on “mysql, insert into … (select ….

  1. Joris November 1, 2009 at 3:26 pm Reply

    Het gaat fout doordat je de kolomnamen niet benoemd, dit heeft niets met de subselect te maken. Zonder subselect zou het ook fout gaat.

    MySQL is redelijk ruk, maar zelfs dit kan MySQL. Subselects gaan wel fout wanneer je een subselect doet op dezelfde tabel als waar je de insert (of update) op wilt doen, dat kan weer niet. PostgreSQL en andere databases hebben daar geen probleem mee.

    Tijd om afscheid te nemen van MySQL? ;)

    • hanswolters November 1, 2009 at 3:31 pm Reply

      Dat afscheid nemen zal vermoedelijk wel gebeuren ja. Ze overigens ook het comment door mijzelf.

  2. Hans W... October 28, 2009 at 11:00 pm Reply

    insert into a (a1, a2) select id, 'xxxxxx' from bar where b1 = 'xyz'

    Het kan dus blijkbaar toch

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: