Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélection de plusieurs colonnes/champs dans la sous-requête MySQL

Oui, vous pouvez le faire. Le talent dont vous avez besoin est le concept selon lequel il existe deux façons d'extraire des tables du serveur de table. Une façon est ..

FROM TABLE A

L'autre façon est

FROM (SELECT col as name1, col2 as name2 FROM ...) B

Notez que la clause select et les parenthèses qui l'entourent sont une table, une table virtuelle.

Donc, en utilisant votre deuxième exemple de code (je devine les colonnes que vous espérez récupérer ici) :

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)

Notez que votre vraie table attribute est la première table de cette jointure, et que cette table virtuelle que j'ai appelée b est la deuxième table.

Cette technique est particulièrement pratique lorsque la table virtuelle est une table récapitulative quelconque. ex.

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)

Vous voyez comment ça se passe ? Vous avez généré une table virtuelle c contenant deux colonnes, l'a joint aux deux autres, a utilisé l'une des colonnes pour le ON clause, et a renvoyé l'autre sous forme de colonne dans votre jeu de résultats.