sql >> Base de Datos >  >> RDS >> Mysql

Selección de múltiples columnas/campos en la subconsulta de MySQL

Sí, usted puede hacer esto. La habilidad que necesita es el concepto de que hay dos formas de sacar tablas del servidor de tablas. Una forma es ..

FROM TABLE A

La otra forma es

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

Observe que la cláusula de selección y los paréntesis que la rodean son una mesa, una mesa virtual.

Entonces, usando su segundo ejemplo de código (supongo las columnas que espera recuperar aquí):

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)

Observe que su tabla real attribute es la primera tabla en esta combinación, y esta tabla virtual la he llamado b es la segunda tabla.

Esta técnica resulta especialmente útil cuando la tabla virtual es una tabla de resumen de algún tipo. por ejemplo

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)

¿Ves cómo va eso? Ha generado una tabla virtual c que contiene dos columnas, la unió a las otras dos, usó una de las columnas para ON y devolvió la otra como una columna en su conjunto de resultados.