Mysql
 sql >> Database >  >> RDS >> Mysql

Selezione di più colonne/campi nella sottoquery MySQL

Si, puoi fare questo. L'abilità di cui hai bisogno è il concetto che ci sono due modi per estrarre le tabelle dal server delle tabelle. Un modo è ..

FROM TABLE A

L'altro modo è

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

Si noti che la clausola select e le parentesi che la circondano sono un tavolo, un tavolo virtuale.

Quindi, usando il tuo secondo esempio di codice (sto indovinando le colonne che speri di recuperare qui):

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)

Nota che la tua tabella reale è attribute è la prima tabella in questo join e quella tabella virtuale che ho chiamato b è la seconda tabella.

Questa tecnica è particolarmente utile quando la tabella virtuale è una tabella riepilogativa di qualche tipo. es.

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)

Vedi come va? Hai generato una tabella virtuale c contenente due colonne, l'ha unita alle altre due, ha utilizzato una delle colonne per il ON clausola e restituita l'altra come colonna nel set di risultati.