[MySQL] Meerdere select statements in insert

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • D4NG3R
  • Registratie: Juli 2009
  • Laatst online: 04-10 21:42
Goed, ik ben momenteel bezig met het porteren van wat oude data in een database, en krijg ondertussen behoorlijk hoofdpijn van het inserten gebruik makend van meerdere select queries.

Even wat indenting voor de leesbaarheid:
MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
INSERT INTO playerreports 
(
    ID, 
    description, 
    createdAt, 
    staffID
) 
VALUES 
(
    (SELECT ID FROM userdata WHERE steamID = 7000000000000000),
    "Blaat",
    "2019-06-17 18:46:01",
    (SELECT ID FROM userdata WHERE discordID = 200000000000000000)
);

De queries worden gegenereerd door een tooltje welke ik even snel in elkaar heb gegooid, enkel de twee ID's dienen uit een al bestaande tabel te worden gehaald.

Afbeeldingslocatie: https://i.gyazo.com/b2c0b52ad63cc2b6dc959b847f99f551.png

Uiteraard werken beide select queries prima op zichzelf en geven ze beiden ook netjes 1 enkele rij terug. De insert handmatig met het resultaat van de 2 select queries invoegen werkt ook prima. (En zou ik als last resort wel in m'n tooltje kunnen verwerken, echter steek ik er liever iets van op dan om het [naar mijn mening] hacky op te gaan lossen)

(My)SQL is verre van m'n sterkste punt, en Google bied jammer genoeg ook vrij weinig soelaas of voorbeelden buiten een enkele select query binnen een insert om, de foutmeldingen zeggen mij ook vrij weinig aangezien ik niet bekend ben met de exacte syntax van insert statements. (buiten statische data of met een enkele select query om)

Wie o wie kan mij de juiste richting op helpen?

[ Voor 13% gewijzigd door D4NG3R op 18-06-2019 01:16 ]

Komt d'r in, dan kö-j d’r oet kieken

Beste antwoord (via D4NG3R op 18-06-2019 11:50)


  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 03-10 12:27
(Je multi-row insert statement met SELECTs lijkt niet te werken voor alle SQL serverimplementaties. Misschien is het alleen phpMyAdmin die dit tegenhoudt?)

Anyway, helpt dit onderstaande met een self-join en dubbele where-clause? (Je hebt je schema niet gepost, dus kan het niet testen, dit was even top of my head van SQL lessen, dus beschouw als ter-inspiratie...)

SQL:
1
2
3
4
5
6
7
8
9
10
INSERT INTO playerreports 
(
    ID, 
    description, 
    createdAt, 
    staffID
) 
SELECT `u1.ID`, "Blaat", "2019-06-17 18:46:01", `u2.ID`
FROM userdata u1, userdata u2 
WHERE u1.steamID=7000000000000000 AND u2.discordID=200000000000000000;


Nadeel: alleen single-row-inserts.

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.

Alle reacties


Acties:
  • 0 Henk 'm!

Verwijderd

Komt er nog een vraag? Of moeten we foutmeldingen "magisch" gaan oplossen in regels die je niet eens gedeeld hebt?

Acties:
  • 0 Henk 'm!

  • D4NG3R
  • Registratie: Juli 2009
  • Laatst online: 04-10 21:42
Verwijderd schreef op dinsdag 18 juni 2019 @ 00:42:
Komt er nog een vraag? Of moeten we foutmeldingen "magisch" gaan oplossen in regels die je niet eens gedeeld hebt?
Ik zat midden in een edit, maar exact welke regels heb je het over? Bovenstaande is letterlijk alles wat phpMyAdmin teruggeeft op exact die query, en daarmee net zo onbruikbaar voor mij als dat het voor jouw schijnbaar is.

1 en 2 gaan over de eerste select statement. 3 en 4 over de 2e mocht dat helpen. :X

[ Voor 13% gewijzigd door D4NG3R op 18-06-2019 00:53 ]

Komt d'r in, dan kö-j d’r oet kieken


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 03-10 12:27
(Je multi-row insert statement met SELECTs lijkt niet te werken voor alle SQL serverimplementaties. Misschien is het alleen phpMyAdmin die dit tegenhoudt?)

Anyway, helpt dit onderstaande met een self-join en dubbele where-clause? (Je hebt je schema niet gepost, dus kan het niet testen, dit was even top of my head van SQL lessen, dus beschouw als ter-inspiratie...)

SQL:
1
2
3
4
5
6
7
8
9
10
INSERT INTO playerreports 
(
    ID, 
    description, 
    createdAt, 
    staffID
) 
SELECT `u1.ID`, "Blaat", "2019-06-17 18:46:01", `u2.ID`
FROM userdata u1, userdata u2 
WHERE u1.steamID=7000000000000000 AND u2.discordID=200000000000000000;


Nadeel: alleen single-row-inserts.

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.


Acties:
  • 0 Henk 'm!

  • D4NG3R
  • Registratie: Juli 2009
  • Laatst online: 04-10 21:42
Zat ik er serieus zo hard overheen te kijken? Misschien moet ik in het vervolg niet zo laat bezig gaan met SQL queries. |:(

Komt d'r in, dan kö-j d’r oet kieken


Acties:
  • 0 Henk 'm!

  • gertvdijk
  • Registratie: November 2003
  • Laatst online: 03-10 12:27
D4NG3R schreef op dinsdag 18 juni 2019 @ 11:50:
Zat ik er serieus zo hard overheen te kijken? Misschien moet ik in het vervolg niet zo laat bezig gaan met SQL queries. |:(
Ach, zo gek was het niet wat je deed. Lijkt in enkele implementaties prima te werken zoals je het had bedacht, zoals in SQLite.

Kia e-Niro 2021 64 kWh DynamicPlusLine. See my GitHub and my blog for articles on security and other stuff.

Pagina: 1