sql >> Database teknologi >  >> RDS >> Mysql

Valg af flere kolonner/felter i MySQL underforespørgsel

Ja, du kan gøre dette. Den evne, du har brug for, er konceptet, at der er to måder at få borde ud af bordserveren på. En måde er ..

FROM TABLE A

Den anden vej er

FROM (SELECT col as name1, col2 as name2 FROM ...) B

Bemærk, at select-sætningen og parenteserne omkring den er et bord, et virtuelt bord.

Så ved at bruge dit andet kodeeksempel (jeg gætter på de kolonner, du håber at hente her):

SELECT a.attr, b.id, b.trans, b.lang
FROM attribute a
JOIN (
 SELECT at.id AS id, at.translation AS trans, at.language AS lang, a.attribute
 FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)

Bemærk, at din rigtige tabel attribute er den første tabel i denne join, og at denne virtuelle tabel har jeg kaldt b er den anden tabel.

Denne teknik er især praktisk, når den virtuelle tabel er en oversigtstabel af en eller anden art. f.eks.

SELECT a.attr, b.id, b.trans, b.lang, c.langcount
FROM attribute a
JOIN (
 SELECT at.id AS id, at.translation AS trans, at.language AS lang, at.attribute
 FROM attributeTranslation at
) b ON (a.id = b.attribute AND b.lang = 1)
JOIN (
 SELECT count(*) AS langcount,  at.attribute
 FROM attributeTranslation at
 GROUP BY at.attribute
) c ON (a.id = c.attribute)

Se hvordan det går? Du har genereret en virtuel tabel c indeholdende to kolonner, forenede det med de to andre, brugte en af ​​kolonnerne til ON klausul, og returnerede den anden som en kolonne i dit resultatsæt.




  1. Denne SELECT-forespørgsel tager 180 sekunder at afslutte

  2. Ydeevne i PDO / PHP / MySQL:transaktion versus direkte eksekvering

  3. MySQL-liste over alle dubletter

  4. Problemsæt 2 – Identifikation af enheder og attributter