通过连接从表中检索数据

fhity93d  于 2021-06-18  发布在  Mysql
关注(0)|答案(4)|浏览(325)

我有三张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` 但没能成功。
任何有关查询或引用的帮助都会很有帮助。
谢谢!
mnemlml8

mnemlml81#

联接在from语句中定义-请仔细阅读https://www.w3schools.com/sql/default.asp 更好地了解join的用法。
根据“referer\u 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

;
krugob8w

krugob8w2#

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
xxb16uws

xxb16uws3#

应该避免使用基于逗号的隐式联接,而使用显式联接 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
z31licg0

z31licg04#

你应该在url上使用两次连接,一次是url\u id,另一次是referer\u 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

通过这种方式,您可以加入会话以获取所需的两个then值

相关问题