Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Möglich, eine Tabelle mit einer bereitgestellten, statischen Datenliste zu verknüpfen?

Wenn ich Ihre Abfrage richtig verstehe, möchten Sie den Datensatz mit der niedrigsten sort_metric auswählen, und wenn es mehr davon gibt, den mit der niedrigsten ID. Ihr doppelter Self-Join wird dadurch verursacht, dass Sie die hässliche in()-Liste nicht duplizieren möchten. Eine andere Möglichkeit, dies zu erreichen, ist die Verwendung eines CTE, der nur einen Self-Join benötigt:

WITH ext AS (
  SELECT id,f_key,name,sort_metric
  FROM tmp.names
  WHERE  f_key IN ( 1, 3, 254, 257, 301, 273, 279 )
  )
SELECT t1.*
  FROM ext t1
  WHERE NOT EXISTS (
    SELECT *
    FROM ext t2
    WHERE t2.sort_metric <= t1.sort_metric
    AND t2.f_key = t1.f_key
    AND t2.id < t1.id
    )
  ORDER BY t1.id
  LIMIT 1
  ;