我有三张table: 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 |
我想要Map `url_id` 在 `sessions` 带的表格 `id` 在 `urls` 并得到相应的 `url` 从 `urls` 表的新列中的值命名为 `url` . 同样,Map `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` 把table拿出来 `url` 以及 `referring_url` 有点棘手。我试过了 `LEFT JOIN` 以及 `INNER JOIN` 但没能成功。
任何有关查询或引用的帮助都会很有帮助。
谢谢!
4条答案
按热度按时间mnemlml81#
联接在from语句中定义-请仔细阅读https://www.w3schools.com/sql/default.asp 更好地了解join的用法。
根据“referer\u url”实际来自哪个表,根据需要修改查询
警告:必须包含限制结果的where语句。我强烈建议您定义一个日期字段和范围,以防止启动长时间运行的查询并影响数据库性能。
查询请参见下文
krugob8w2#
xxb16uws3#
应该避免使用基于逗号的隐式联接,而使用显式联接
Join
基于语法你需要两个连接
urls
表格;一个去拿url
再来一杯referrer_url
.请尝试以下操作:
z31licg04#
你应该在url上使用两次连接,一次是url\u id,另一次是referer\u id
通过这种方式,您可以加入会话以获取所需的两个then值