首页 > 解决方案 > 在 cassandra 和 sql 中连接表

问题描述

我有一个查询如下:

SELECT distinct(T1.USER_ID)
FROM   T1
LEFT OUTER JOIN T2
ON (T1.USER_ID = T2.USERID)
WHERE T2.USERID IS NULL
AND T1.enrolled_date < some_timestamp;

我需要了解这与以下内容有何不同:

SELECT distinct(T1.USER_ID)
FROM   T1
WHERE T1.USER_ID IS NULL
AND T1.enrolled_date < some_timestamp;

因为我们在 T1 和 T2 上进行左连接,条件是两个用户 ID 相同并检查 t2.user_id 是否为空,我们不能只检查 t1.user_id 是否为空吗?

我需要在 Cassandra 上实现这个(使用 DataStax),因此我想知道是否可以避免加入。

标签: sqldatabasejoincassandracql

解决方案


此查询是说“从 t1 获取所有唯一的 user_id,这些 user_id 在 t2 中没有存在(t2.userid 为空),其注册日期的值小于 some_timestamp 值

SELECT distinct(T1.USER_ID)
  FROM   T1
LEFT OUTER JOIN T2
    ON (T1.USER_ID = T2.USERID)
 WHERE T2.USERID IS NULL
   AND T1.enrolled_date < some_timestamp;

重写的查询不等同于上面的查询。它说,从单个表 t1 中获取所有唯一的 user_id (NULL),它的注册日期小于 some_timestamp

SELECT distinct(T1.USER_ID)
--I guess you missed the FROM T1 portion???
WHERE T1.USER_ID IS NULL
  AND T1.enrolled_date < some_timestamp;

推荐阅读