Ja, das können Sie tun. Der Trick, den Sie brauchen, ist das Konzept, dass es zwei Möglichkeiten gibt, Tabellen aus dem Tabellenserver herauszuholen. Eine Möglichkeit ist ..
FROM TABLE A
Der andere Weg ist
FROM (SELECT col as name1, col2 as name2 FROM ...) B
Beachten Sie, dass die select-Klausel und die sie umgebenden Klammern sind ein Tisch, ein virtueller Tisch.
Verwenden Sie also Ihr zweites Codebeispiel (ich vermute die Spalten, die Sie hier abrufen möchten):
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)
Beachten Sie, dass Ihr echtes Tabellen-attribute
die erste Tabelle in diesem Join ist und dass ich diese virtuelle Tabelle b
genannt habe ist die zweite Tabelle.
Diese Technik ist besonders praktisch, wenn die virtuelle Tabelle eine Art Übersichtstabelle ist. zB
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)
Sehen Sie, wie das geht? Sie haben eine virtuelle Tabelle c
generiert mit zwei Spalten, mit den anderen beiden verbunden, eine der Spalten für ON
verwendet -Klausel und gab die andere als Spalte in Ihrer Ergebnismenge zurück.