Этот раздел обсуждался очень много, но мне не удалось найти решение, которое я могу изменить и заставить его работать для моего дела. Поэтому, возможно, более опытный специалист сможет помочь.Выберите отдельные и случайные строки из одной таблицы, которые соответствуют значению из другой таблицы
У меня есть таблица под названием keywords
, которая содержит около 3000 строк с различными ключевыми словами. Против каждого ключевого слова имеется соответствие product_id
, которые НЕ являются уникальными, то есть некоторые из них повторяются. Таблица выглядит примерно так:
+---------+------------+
| keyword | product_id |
+---------+------------+
| apple1 | 15 |
| apple2 | 15 |
| pear | 205 |
| cherry | 307 |
| melon | 5023 |
+---------+------------+
У меня есть таблица под названием inventory
, который содержит около 500K продуктов каждый с собственным ID продукта и других данных о продукции.
Теперь мне нужно получить одну случайную строку продукта из таблицы inventory
, которая соответствует каждой таблице product_id
от keywords
и вставляет эти строки в другую таблицу.
Результирующая таблица должна быть чем-то вроде этого:
+---------+------------+---------+---------+---------+
| keyword | product_id | product | data1 | data2 |
+---------+------------+---------+---------+---------+
| apple1 | 15 | app5 | d1 | d2 |
| apple2 | 15 | app1 | d1 | d2 |
| pear | 205 | pear53 | d1 | d2 |
| cherry | 307 | cher74 | d1 | d2 |
| melon | 5023 | melo2 | d1 | d2 |
+---------+------------+---------+---------+---------+
Это мой запрос в данный момент, и проблема заключается в том, чтобы получить случайный продукт из inventory
, что соответствует product_id
:
SELECT keywords.keyword, keywords.product_id, inventory.*
FROM keywords LEFT OUTER JOIN
inventory
ON keywords.product_id = inventory.id
ORDER BY RAND();
Привет, разработчик, благодарю вас за ответ. Я на самом деле хочу иметь случайное совпадение для каждого 'keyword', а результат возвращает только уникальное' keyword'. Теперь я получаю повторяющиеся ключевые слова для каждого продукта, который соответствует 'product_id' – BradG
@BradG. Вам, вероятно, придется добавить некоторую группу с' group by'. Группируйте по критериям, по которым вы хотите, чтобы значения были уникальными. (FYI, добавьте предложение 'group by' перед предложением' order by'.) – developerwjk
это работает, просто пробовали с 'left external join' и' group by', и все в порядке. Еще один вопрос: как ограничить ключевые слова, чтобы выбрать, т. Е. Добавить что-то вроде 'WHERE keywords.type = '2''. Может быть, вложенный выбор? – BradG