Получить данные из таблиц через JOINS - PullRequest
0 голосов
/ 25 октября 2018

У меня есть три таблицы: sessions, urls и visitors.Мне нужно объединить эти три таблицы таким образом, чтобы я мог получать данные из каждой таблицы, а максимальное количество возвращаемых строк должно быть равно сеансам.

Ниже приведена базовая схема моих таблиц.

Таблица sessions

session_id | url_id | referrer_id | country
-------------------------------------------
  1234     |  a1b1  |    bb11     |   US
  4567     |  x1y1  |    ll33     |   IN
  6789     |  a1b1  |    ff99     |   UK

Таблица urls

  id       |        url                 |
-----------------------------------------
 a1b1      | https://url-1.com          |
 x1y1      | https://url-2.com          |
 bb11      | https://referrer-url-1.com |
 ll33      | https://referrer-url-2.com |
 ff99      | https://referrer-url-3.com |

Таблица visitors

   id      | session_id | visiting_time |
-----------------------------------------
   1       |   1234     |   447383930   |
   2       |   4567     |   547383930   |
   3       |   6789     |   647383930   |

Что я хочу как конечный результат должен выглядеть следующим образом: :

 session_id | visiting_time | url                |  referrer_url      | country
------------------------------------------------------------------------------------------
   1234     |  447383930    | https://url-1.com  | https://referrer-url-1.com | US |
   4567     |  547383930    | https://url-2.com  | https://referrer-url-2.com | IN |
   6789     |  647383930    | https://url-1.com  | https://referrer-url-3.com | UK |

Я хочу отобразить url_id в sessions таблице с id в urls таблице и получить соответствующую url изurls таблицы и имеют значение в новом столбце с именем url.Аналогично, сопоставьте referrer_id в sessions таблице с id в urls таблице и получите соответствующую url из urls таблицы и получите значение в новом столбце с именем referring_url.

Как вы можете видеть: СОЕДИНЕНИЕ с sessions и visitors является простым и может быть просто сделано с помощью:

select session_id, visiting_time, country
from sessions,
     visitors
where sessions.session_id = visitors.session_id;

Но соединение с таблицей urls и получение url и referring_urlнесколько сложно.Я пробовал LEFT JOIN и INNER JOIN, но не смог заставить его работать.

Любая помощь с запросом или ссылками была бы полезна.

Спасибо!

Ответы [ 4 ]

0 голосов
/ 25 октября 2018

Объединения определены в операторе from - пожалуйста, прочтите https://www.w3schools.com/sql/default.asp, чтобы лучше понять использование объединения.

Измените запрос, если необходимо, в зависимости от того, какая таблица "referrer_url" действительно приходит.с

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

См. Ниже запрос

select 
s.session_id, 
v.visiting_time, 
s.country,
u.url,
u.referrer_url


from 
sessions s
join visitors v on session_id
join urls on u.id=s.url_id

;
0 голосов
/ 25 октября 2018
select sessions.session_id, visitors.visiting_time, urls.url, urlsReferrer.url referrer_url, sessions.country
from sessions
        inner join visitors on sessions.session_id = visitors.session_id
        inner join urls on sessions.url_id = url.id
        left join urls urlsReferrer on sessions.referrer_id = urlsReferrer.id
0 голосов
/ 25 октября 2018

Вы должны использовать соединение по URL-адресам дважды, один из url_id и один для referrer_id

    select session_id
      , visiting_time
      , u1.url
      , u2.url
      , country
    from sessions
    INNER JOIN  visitors ON sessions.session_id = visitors.session_id
    INNER JOIN urls u1 on u1.id= sessions.url_id
    INNER JOIN urls u2 on u2.id= sessions.referrer_id

Таким образом, вы можете присоединиться к сеансам для получения обоих значений, а затем нужных вам значений

0 голосов
/ 25 октября 2018
  • Вам следует избегать использования неявных объединений на основе запятых и использовать Явный синтаксис на основе Join
  • Вам понадобятся два объединения с таблицей urls;один для получения url и другой для referrer_url.

Попробуйте выполнить следующее:

SELECT s.session_id, 
       v.visiting_time, 
       u1.url, 
       u2.url AS referrer_url, 
       s.country
FROM sessions AS s
JOIN visitors AS v ON v.session_id = s.session_id 
JOIN urls AS u1 ON u1.id = s.url_id 
JOIN urls AS u2 ON u2.id = s.referrer_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...