Соединение столов в Кассандре и sql - PullRequest
0 голосов
/ 19 марта 2020

У меня следующий запрос:

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 при условии, что оба идентификатора пользователя одинаковы, и проверка, является ли t2.user_id нулевым, не можем ли мы просто проверить, является ли t1.user_id нулевым или нет?

Мне нужно реализовать это на Cassandra (используя DataStax ), поэтому мне было интересно, смогу ли я избежать объединения.

1 Ответ

2 голосов
/ 19 марта 2020

этот запрос говорит как "получить все уникальные user_id из t1, которые не имеют подарка в t2 (t2.userid имеет значение null), у которых значение enrolled_date меньше значения 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;

Переписанный запрос не эквивалентен приведенному выше. Он говорит: получить все уникальные user_id (NULL), которые являются нулевыми, из единственной таблицы t1, enrolled_date которой меньше 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;
...