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

mysql - Anvendelse af en ydre joinforbindelse til en kompleks sætning

Jeg kan kun komme i tanke om én måde at opnå dette på. Med en kombination af GROUP_CONCAT og SUBSTRING_INDEX på din aktuelle arbejdsforespørgsel. Eksempel på forespørgsel nedenfor:

SELECT    person_id,
          SUBSTRING_INDEX(GROUP_CONCAT(a.name ORDER BY a.score DESC),',',1) sname, 
          SUBSTRING_INDEX(GROUP_CONCAT(a.score ORDER BY a.score DESC),',',1) max_score FROM 
(SELECT   people.person_id,
          names.name,
          CASE 
          WHEN people.person_default_name_id=names.name_id AND language_scripts.script_id = '1' THEN 3
          WHEN names.language_id = '1' THEN 2
          WHEN language_scripts.script_id = '1' THEN 1
          ELSE 0
          END AS score
FROM      `people` 
LEFT JOIN `names` ON names.person_id=people.person_id
LEFT JOIN `languages` ON names.language_id = languages.language_id
LEFT JOIN `language_scripts` ON languages.language_id = language_scripts.language_id) a 
GROUP BY person_id;

Jeg testede også forespørgslen i violinen http://sqlfiddle.com/#!9 /54ce8/33

Lidt forklaring:

  1. GROUP_CONCAT over navnet og scoren med tilføjelse af ORDER BY betingelse - bemærk, at ORDER BY skal være identiske i begge GROUP_CONCAT .
  2. SUBSTRING_INDEX for at få den første værdi adskilt af komma (,) i feltet.


  1. kompleks MySQL-forespørgsel forkerte resultater

  2. Hvordan finder jeg en lagret procedure, der indeholder <tekst>?

  3. En oversigt over PostgreSQL &MySQL krydsreplikering

  4. PL/SQL - Valgfri betingelser i where-klausul - uden dynamisk sql?