Как объединить три источника данных? - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть запрос примерно такой:

SELECT a.shop_id,
         a.product_id,
         a.position,
         b.category_id
FROM X AS a
JOIN Y AS b
    ON a.product_id = CAST(b.id AS bigint)
WHERE site_id = 1
GROUP BY  a.shop_id, a.product_id, b.category_id, a.position 

Теперь я хочу получить еще одну переменную (book_name) из источника данных Z. Чтобы сделать это, я должен соединить источник данных Z с вышеупомянутым запросом, выполнив это:

JOIN Z AS c
    ON a.product_id = CAST(c.id AS bigint)

Но я не знаю, куда мне его поместить. Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Вы всегда должны размещать все объединения после предложения FROM . Один за другим.

SELECT a.shop_id,
         a.product_id,
         a.position,
         b.category_id,
         c.book_name
FROM X AS a
JOIN Y AS b
    ON a.product_id = CAST(b.id AS bigint)
JOIN Z AS c
    ON a.product_id = CAST(c.id AS bigint)
WHERE site_id = 1
GROUP BY  a.shop_id, a.product_id, b.category_id, a.position 

Кроме того, помните, что существуют различные типы объединений. В этом случае вы используете внутреннее объединение , которое будет возвращать все записи из 3 таблиц, где выполняется условие объединения.

Пожалуйста, найдите эту полезную ссылку, если хотите прочитайте немного больше о других типах объединений. Я нашел это очень удобным.

SQL Типы регистрации

Надеюсь, эта помощь!

0 голосов
/ 11 февраля 2020

Просто добавьте его с другими операторами соединения и получите имя_буклы из c -

SELECT a.shop_id,
         a.product_id,
         a.position,
         b.category_id,
         c.book_name
FROM X AS a
JOIN Y AS b
    ON a.product_id = CAST(b.id AS bigint)
JOIN Z AS c
    ON a.product_id = CAST(c.id AS bigint)
WHERE site_id = 1
GROUP BY  a.shop_id, a.product_id, b.category_id, a.position 
...