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

MySQL Muligt at JOIN en tabel mod en angivet, statisk liste over data?

Hvis jeg forstår din forespørgsel korrekt, har du til hensigt at vælge posten med den laveste sort_metric, og hvis der er flere af disse, den med det laveste id. Din dobbelt-selv-join er forårsaget af, at du ikke ønsker at duplikere den grimme in()-liste. En anden måde at opnå dette på er ved hjælp af en CTE, der kun behøver én selv-join:

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
  ;


  1. Sådan fungerer TRIM()-funktionen i MySQL

  2. EF6 Oracle tidsstempel og dato

  3. Valg af alle felter undtagen kun ét felt i mysql

  4. optimer forespørgsel med datotypefelt i mysql