sql >> Databasteknik >  >> RDS >> Mysql

Välja flera kolumner/fält i MySQL-underfrågan

Ja, du kan göra det här. Den knep du behöver är konceptet att det finns två sätt att få ut bord från bordsservern. Ett sätt är ..

FROM TABLE A

Det andra sättet är

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

Lägg märke till att select-satsen och parenteserna runt den är ett bord, ett virtuellt bord.

Så, med ditt andra kodexempel (jag gissar på kolumnerna du hoppas kunna hämta här):

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)

Lägg märke till att ditt riktiga tabell attribute är den första tabellen i denna join, och den här virtuella tabellen har jag kallat b är det andra bordet.

Denna teknik är särskilt användbar när den virtuella tabellen är en sammanfattningstabell av något slag. t.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)

Se hur det går? Du har skapat en virtuell tabell c innehållande två kolumner, sammanfogade den med de andra två, använde en av kolumnerna för ON sats, och returnerade den andra som en kolumn i din resultatuppsättning.




  1. Hur EXCEPT fungerar i PostgreSQL

  2. Java+Tomcat, Döende databasanslutning?

  3. Flerskiktskommentarsvar:Display och lagring

  4. Hur MINUTE() fungerar i MariaDB