我有三个表: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
,但是无法正常工作。
任何有关查询或引用的帮助都会有所帮助。
谢谢!
答案 0 :(得分:2)
Join
based syntax 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
答案 1 :(得分:1)
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
答案 2 :(得分:1)
您应该对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
通过这种方式,您可以加入会话以同时获取所需的值
答案 3 :(得分:1)
联接是在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
;