Я искал вокруг и нашел возле примера к тому, что я ищу, но в моем случае это не сработало.
У меня есть запрос, который выполняет INNER JOINна двух таблицах, и это объединение существенно ограничивает мой общий набор данных.Затем я хочу присоединиться к третьей таблице , но мне нужна только одна запись из этой третьей таблицы .Причина левого соединения состоит в том, что не каждый результат INNER JOIN имеет совпадение в 3-й таблице.Примерно так:
SELECT DISTINCT t1.code, t2.id, t2.code, t3.id, t3.source_title, t3.display_order
FROM table1 t1
INNER JOIN table2 t2 ON t2.code=t1.code AND t2.type=0
LEFT JOIN table3 t3 ON t3.code=t1.code
ORDER BY t1.code, t3.display_order
Этот запрос возвращает слишком много записей, поскольку третья таблица содержит несколько записей с совпадающим кодом .Я просто хочу, чтобы первое совпадало с самым низким значением display_order , и, к сожалению, я не могу ограничить записи значением display_order = 1, потому что самый низкий порядок отображения не всегда один.
ВАЖНО : значение t3.id (если есть), возвращаемое этим запросом , должно соответствовать записи с наименьшим значением display_order. Т.е., если запрос будет работать некорректновозвращает наименьшее значение display_order, но значение t3.id соответствует какой-то другой записи в таблице 3.
Возможно ли это вообще?Любая помощь будет высоко ценится.
РЕДАКТИРОВАТЬ: В соответствии с предложением Ника, я попробовал это, который, кажется, работает.Я сделаю некоторые проверки и сообщу:
SELECT DISTINCT t1.code, t2.*, sq.id, sq.source_title, sq.display_order
FROM table1 t1
INNER JOIN table2 p ON t2.code=t1.code AND t2.type=0
LEFT JOIN (
SELECT t3.*
FROM table3 t3
WHERE t3.display_order=(
SELECT MIN(display_order)
FROM table3 t3a
WHERE t3a.code = t3.code
)
) sq ON sq.code=t1.code
ORDER BY t1.code, sq.display_order