sql >> Database >  >> RDS >> Mysql

Meerdere kolommen/velden selecteren in MySQL-subquery

Ja, u kunt dit doen. De handigheid die je nodig hebt, is het concept dat er twee manieren zijn om tafels uit de tafelserver te halen. Een manier is ..

FROM TABLE A

De andere manier is

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

Merk op dat de select-clausule en de haakjes eromheen zijn een tafel, een virtuele tafel.

Dus, met behulp van uw tweede codevoorbeeld (ik gok op de kolommen die u hier hoopt op te halen):

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)

Merk op dat uw echte tabel attribute is de eerste tafel in deze join, en die virtuele tafel heb ik b . genoemd is de tweede tafel.

Deze techniek is vooral handig wanneer de virtuele tabel een soort samenvattende tabel is. bijv.

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)

Zie je hoe dat gaat? Je hebt een virtuele tabel gemaakt c met twee kolommen, samengevoegd met de andere twee, een van de kolommen gebruikt voor de ON clausule, en de andere geretourneerd als een kolom in uw resultatenset.




  1. Migreren van Postgres naar SQL Server 2008

  2. Waarde berekenen met behulp van de vorige waarde van een rij in T-SQL

  3. Zijn er SQL Validators die de syntaxis kunnen controleren op meerdere databaseservers?

  4. Stel de AUTO_INCREMENT-waarde in via variabele in MySql