Да, можете да направите това. Умението, от което се нуждаете, е концепцията, че има два начина за извеждане на таблици от сървъра за таблици. Един от начините е...
FROM TABLE A
Другият начин е
FROM (SELECT col as name1, col2 as name2 FROM ...) B
Забележете, че клаузата select и скобите около нея са маса, виртуална маса.
И така, използвайки втория ви пример за код (предполагам за колоните, които се надявате да извлечете тук):
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)
Забележете, че вашата реална таблица attribute
е първата таблица в това присъединяване и тази виртуална таблица, която нарекох b
е втората таблица.
Тази техника е особено удобна, когато виртуалната таблица е някаква обобщена таблица. напр.
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)
Вижте как става това? Вие генерирахте виртуална таблица c
съдържащ две колони, го присъедини към другите две, използва една от колоните за ON
клауза и върна другия като колона във вашия набор от резултати.