sql >> Databáze >  >> RDS >> Mysql

Výběr více sloupců/polí v poddotazu MySQL

Ano, můžete to udělat. Zručnost, kterou potřebujete, je koncept, že existují dva způsoby, jak dostat tabulky z tabulkového serveru. Jeden způsob je ..

FROM TABLE A

Druhý způsob je

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

Všimněte si, že klauzule select a závorky kolem ní jsou stůl, virtuální stůl.

Takže pomocí vašeho druhého příkladu kódu (hádám, že sloupce, které chcete zde získat):

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)

Všimněte si, že vaše skutečná tabulka attribute je první tabulka v tomto spojení a tuto virtuální tabulku jsem nazval b je druhá tabulka.

Tato technika je zvláště užitečná, když je virtuální tabulka souhrnnou tabulkou nějakého druhu. např.

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)

Vidíš, jak to jde? Vytvořili jste virtuální tabulku c obsahující dva sloupce, připojil jej k dalším dvěma, použil jeden ze sloupců pro ON klauzuli a vrátil druhou jako sloupec v sadě výsledků.




  1. T-SQL vs SQL

  2. TODATETIMEOFFSET() Příklady v SQL Server

  3. MySQL/InnoDB a dlouhotrvající dotazy

  4. Odeslat ArrayList z Androidu do php MySQL