首页 > 解决方案 > 通过 JOINS 从表中检索数据

问题描述

我有三个表sessionsurlsvisitors。我需要以这样一种方式连接这三个表,即我应该能够从每个表中获取数据,并且返回的最大行数应该等于会话数。

以下是我的表的基本架构。

桌子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_idsessionsid中并从表中urls获取相应的值并在名为的新列中具有值。类似地,将in table 与in table 映射并从table 中获取相应的值,并在名为 的新列中具有值。urlurlsurlreferrer_idsessionsidurlsurlurlsreferring_url

如您所见:使用sessionsandvisitors连接很简单,可以通过以下方式完成:

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

但是加入urlstable 并获得urlandreferring_url有点棘手。我已经尝试过LEFT JOININNER JOIN但无法使其工作。

任何有关查询或参考的帮助都会有所帮助。

谢谢!

标签: mysqlsqlpostgresql

解决方案


  • 您应该避免使用基于逗号的隐式连接并使用基于显式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

推荐阅读