Выбор одной строки из второй таблицы LEFT JOIN

Эдди

Новичок
Есть довольно сложный запрос.
Надо добавить туда еще одну таблицу, которая может что-то выдать, может не выдать, а может и выдать много строк.
А надо взять любую из полученных строк второй таблицы. ОДНУ.
Как решается? Ничего не приходит в голову.
 

fixxxer

К.О.
Партнер клуба
Задача разбивается на две части:
1) написать запрос, который выдаст по условию join-а (скажем, foo_id) только 1 строку с таким foo_id
2) приджойнить: left join (select ...) x on (x.foo_id = foo.id)

Это, конечно, будет не очень быстро.

Если уточнить СУБД, можно и о других вариантах подумать (CTE, скажем).

Если mysql и без ansi/strict, там есть баг, который в данном случае фича, а если с ними, то есть ANY_VALUE. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
@Эдди, а еслиб еще запросы написал, пусть в сокращенном виде но описывающии проблему, (желательно с тестовыми данными), то точно написали бы правильно
 

fixxxer

К.О.
Партнер клуба
Прошу прощения. Естественно Mysql
Если mysql и без ansi/strict, там есть баг, который в данном случае фича, а если с ними, то есть ANY_VALUE. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
If you know that, for a given data set, each name value in fact uniquely determines the address value, address is effectively functionally dependent on name. To tell MySQL to accept the query, you can use the ANY_VALUE() function:

SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
Alternatively, disable ONLY_FULL_GROUP_BY.
 

Эдди

Новичок
Давайте, лучше с примером. Упрощенно выглядит так.:

Выводим все отзывы клиентов:

Код:
SELECT DISTINCT author, text, rating, DATE_FORMAT(date_added,'%d-%m-%Y') AS date_added, name AS product FROM review r, product_description p WHERE r.product_id = p.product_id AND status = 1
Каждый отзыв относится к определенному товару, конечно.
И надо вторым запросом или тем же по каждому отзыву получить пути категорий, чтобы сформировать ссылку на данный товар. Ай-ди товара уже имеется. Нужны пути категорий.
Было бы все просто, если бы каждый товар был бы только в одной категории.
Но товар может относиться и более чем в одной категории.
Тогда вторая часть запроса выведет более одной строки, а мне нужна одна строка, чтобы не задвоились строки. Все равно какая там будет категория. Лишь бы одна из.

Не знаю, объяснил ли. :(
 

Эдди

Новичок
Каждая категория имеет и подкатегории. И там не одна таблица, а связанные между собой две по ай-ди, указывая какая категория родительская.
Потому, думаю, лучше чем вложенный запрос придумать вряд ли что удастся.
 

WMix

герр M:)ller
Партнер клуба
предыдущий запрос пишут так
Код:
SELECT DISTINCT
    author, text, rating, DATE_FORMAT(date_added,'%d-%m-%Y') AS date_added, name AS product
FROM review r
JOIN product_description p ON r.product_id = p.product_id
WHERE status = 1
уверен что DISTINCT нужен?

DATE_FORMAT(date_added,'%d-%m-%Y') AS date_added
не советую, это делать на SQL уровне

про категории я еще не понял, пример запроса
 

Эдди

Новичок
Сверху