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.