nanny_ogg
@nanny_ogg
My name is Masha. I'm from Russia

Как использовать DISTINCT с LEFT JOIN?

$all_sales_select = mysql_query('
		SELECT sc.*, wpu.money, DISTINCT scm.value
		FROM sales_catalog sc 
		LEFT JOIN wp_users wpu 
			ON sc.sale_provider_id = wpu.ID 
		LEFT JOIN sales_catalog_meta scm
			ON sc.sale_id = scm.sale_id
		WHERE sc.sale_provider_id="'.$user_id.'" 
			AND scm.type = "image"
		ORDER BY sc.insert_date, sc.sale_id') or die(mysql_error());

ошибка возникает, если используется DISTINCT. без него все извлекается верно
  • Вопрос задан
  • 13885 просмотров
Решения вопроса 1
Ermako
@Ermako
Data Scientist
Тут, конечно, стоило сразу писать, что Вы хотите получить, чтобы не возникало распространенного казуса xyz

Конкретно тут, если требуется получить одно значение из таблицы scm, можно сделать через группировку

$all_sales_select = mysql_query('
    SELECT sc.*, wpu.money, scm.value
    FROM sales_catalog sc 
    LEFT JOIN wp_users wpu 
      ON sc.sale_provider_id = wpu.ID 
    LEFT JOIN (select sale_id, max(value) as value
               from sales_catalog_meta 
               WHERE type = "image"
               group by sale_id) scm
      ON sc.sale_id = scm.sale_id
    WHERE sc.sale_provider_id="'.$user_id.'" 
    ORDER BY sc.insert_date, sc.sale_id') or die(mysql_error());


Либо делать подзапрос в поле, если выборка достаточно маленькая, чтобы не лопатить группировкой всю таблицу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
DISTINCT имеет смысл использовать с INNER JOIN.
SQL JOIN
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы