Ja, u kunt dit doen. De handigheid die je nodig hebt, is het concept dat er twee manieren zijn om tafels uit de tafelserver te halen. Een manier is ..
FROM TABLE A
De andere manier is
FROM (SELECT col as name1, col2 as name2 FROM ...) B
Merk op dat de select-clausule en de haakjes eromheen zijn een tafel, een virtuele tafel.
Dus, met behulp van uw tweede codevoorbeeld (ik gok op de kolommen die u hier hoopt op te halen):
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)
Merk op dat uw echte tabel attribute
is de eerste tafel in deze join, en die virtuele tafel heb ik b
. genoemd is de tweede tafel.
Deze techniek is vooral handig wanneer de virtuele tabel een soort samenvattende tabel is. bijv.
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)
Zie je hoe dat gaat? Je hebt een virtuele tabel gemaakt c
met twee kolommen, samengevoegd met de andere twee, een van de kolommen gebruikt voor de ON
clausule, en de andere geretourneerd als een kolom in uw resultatenset.