Одни и те же вопросы с разных аккаунтов??
я так понимаю что это тоже самое или суть аналогична:
Получить строку с максимальным совпадением? ??
вместо `movie_desc` - `setting_value` (смотри ниже запрос и примеры)
через оконные функции надо делать, если на MySQL 8 (СУБД вы НЕ указали...), функция ранжирования -
row_number()-- здесь я вынес параметры (домены, языки) в отдельное представление param,
-- которое определяется перед SELECT
-- это сделано, для того чтобы по всему запросу не искать и вписывать их
-- меняется все в одном месте:
WITH param AS (
SELECT
2 AS primary_domain_id, -- id первичного домена
1 AS secondary_domain_id, -- id вторичного домена
2 AS primary_language_id, -- id первичного языка
1 AS secondary_language_id -- id вторичного языка
FROM dual
)
SELECT *
FROM (
SELECT m.*,
row_number() over (
partition by m.movie_id
order by
case
when m.domain_id = p.primary_domain_id then 100
when m.domain_id = p.secondary_domain_id then 50
else 1
end DESC,
case
when m.language_id = p.primary_language_id then 100
when m.language_id = p.secondary_language_id then 50
else 1
end DESC
) rn
FROM `movie_desc` m, param p
WHERE (m.domain_id = p.primary_domain_id
OR m.domain_id = p.secondary_domain_id
OR m.domain_id IS NULL)
AND (m.language_id = p.primary_language_id
OR m.language_id = p.secondary_language_id
OR m.language_id IS NULL)
) t
WHERE t.rn = 1
;
Примеры на:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f46bf1...
https://www.db-fiddle.com/f/8UigbxU6uNg6guU8ygKgrA/1
PS: если MySQL более древний чем 8й, то попробуйте переписать как описано на второй странице той же статьи , ссылка на которую приведена выше.
www.sql-tutorial.ru/ru/book_row_number_function/pa...