У меня есть таблица tbl_random
с примерно 3000 ключевыми словами и идентификаторами моделей. Ключевое слово уникально, model_id нет:
+---------+------------+---------+---------+--------------+
| keyword | model_id | make | model | more_data |
+---------+------------+---------+---------+--------------+
| apple1 | 15 | | | |
| apple2 | 15 | | | |
| pear | 205 | | | |
| cherry | 307 | | | |
| melon | 5023 | | | |
+---------+------------+---------+---------+--------------+
и у меня есть вторая таблица tbl_products
с примерно 500 тыс. записей, которая содержит фактические продукты и подробную информацию о них:
+---------+--------+------------+
| make | model | more_data |
+---------+--------+------------+
| app1 | 15 | data1 |
| app1 | 15 | data2 |
| cher74 | 307 | data4 |
| melo2 | 5023 | data5 |
| pear53 | 205 | data3 |
+---------+--------+------------+
Общий идентификатор между двумя таблицами — model_id
и model
соответственно.
Что мне нужно сделать, так это написать запрос UPDATE MySQL, который обновит make
model
и more_data
в tbl_random
в соответствии с этими критериями:
Запрос должен выбрать одну случайную строку из tbl_products
, которая соответствует каждому model_id
из tbl_random
для уникальных ключевых слов.
Я пытался сделать это различными способами, используя UPDATE, LEFT JOIN и SELECT STATEMENTS, но пока не могу заставить его работать.
Мое последнее утверждение, пытающееся обновить только make
, это то, что, однако, оно не работает - MySQL начинает его выполнять, и ничего не происходит, за исключением того, что мне нужно перезапустить MySQL, чтобы снова сделать его доступным:
UPDATE tbl_random
SET tbl_random.make =
(SELECT tbl_products.make FROM tbl_products
WHERE tbl_random.model_id = tbl_products.model
GROUP BY tbl_random.keyword
ORDER BY RAND())
Окончательный желаемый результат для tbl_random
таков:
+---------+------------+---------+---------+--------------+
| keyword | model_id | make | model | more_data |
+---------+------------+---------+---------+--------------+
| apple1 | 15 | app1 | 15 | data1 |
| apple2 | 15 | app1 | 15 | data2 |
| pear | 205 | pear53 | 205 | data3 |
| cherry | 307 | cher74 | 307 | data4 |
| melon | 5023 | melo2 | 5023 | data5 |
+---------+------------+---------+---------+--------------+
Любая помощь или предложения будут оценены!
#1054 - Unknown column 'tbl_random.model_id' in 'where clause'
- person BradG   schedule 09.01.2015tbl_random
:SELECT tbl_random.keyword, tbl_random.model_id, tbl_products.make, tbl_products.model, FROM tbl_random LEFT OUTER JOIN tbl_products ON tbl_random.model_id = tbl_products.model GROUP BY tbl_random ORDER BY RAND()
- person BradG   schedule 09.01.2015And how do you determine that data1 belongs with apple1 and data2 belongs with apple2
- на самом деле мне не нужно это определять. app1 и app2 могут быть связаны либо с apple1, либо с apple2. Общим для двух таблиц являетсяmodel_id
иmodel
. Так как app1 и app2 имеютmodel=15
, они должны располагаться случайным образом против любого ключевого слова сmodel_id=15
. - person BradG   schedule 09.01.2015