Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Auswählen mehrerer Spalten/Felder in einer MySQL-Unterabfrage

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.