Каков наилучший способ сохранить результаты запроса с помощью подзапроса? - PullRequest
0 голосов
/ 10 февраля 2019

Я хочу показать все пары похожих продуктов, которые понравились пользователям вместе, поэтому я подумал о создании VIEW для динамического обновления таблицы.

Я получаю сообщение, что не могу СОЗДАТЬ VIEW сподзапрос.Я также думал о создании временной таблицы, но она неэффективна.

Как сохранить результаты запроса в таблице при наличии ограничения VIEW?

Это мой запрос:

SELECT DISTINCT c.item1
           , c.item2
           , count(*) as times_liked_together 
         FROM 
     ( SELECT a.product_id as item1
            , b.product_id as item2 
    FROM items a 
    join items b 
         ON a.wishlist_id = b.wishlist_id 
         AND a.product_id != b.product_id
     ) c 
 GROUP 
      BY c.item1
     , c.item2

1 Ответ

0 голосов
/ 10 февраля 2019

MySQL имеет это ограничение для представлений.В вашем случае вам не нужен подзапрос:

SELECT i1.product_id as item1, i2.product_id as liked_with,
       COUNT(*) as num_liked_together
FROM items i1 INNER JOIN
     items i2
     ON i1.wishlist_id = i2.wishlist_id AND
        i1.product_id < i2.product_id
GROUP BY item1, item2;

Обратите внимание, что я изменил <> на <.Я не вижу причины иметь оба (a, b) и (b, a) в наборе результатов.Если вы это сделаете, измените < обратно на <>.

Кроме того, SELECT DISTINCT почти никогда не используется с GROUP BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...