我有一些表,这些表包含这些产品的这些用户的用户(用户ID,用户名),产品(产品ID,产品名)和视图(用户ID,产品ID,时间戳)。
现在,我想显示一个矩阵,引用所有产品和所有用户,以及他们是否看过产品(0或1)。因此,当有2个用户和3个产品时,结果可能是这样的:
+---------+------------+------+
| user_id | product_id | seen |
+---------+------------+------+
| 1 | 1 | 0 |
+---------+------------+------+
| 1 | 2 | 0 |
+---------+------------+------+
| 1 | 3 | 1 |
+---------+------------+------+
| 2 | 1 | 1 |
+---------+------------+------+
| 2 | 2 | 0 |
+---------+------------+------+
| 2 | 3 | 0 |
+---------+------------+------+
但是如何?我只能检索已看到的用户和产品,因为视图表可以“连接”它们。
答案 0 :(得分:1)
尝试交叉连接用户和产品表,然后将其左连接到联结表:
SELECT
u.user_id,
p.product_id,
CASE WHEN v.timestamp IS NOT NULL THEN 1 ELSE 0 END AS seen
FROM Users u
CROSS JOIN Products p
LEFT JOIN Views v
ON u.user_id = v.user_id AND p.product_id = v.product_id;
如果对于给定的用户/产品组合,Views
表可能有多个条目,并且您只想报告一次可见事件,则可以对以上查询使用SELECT DISTINCT
。