Удаление данных с помощью Join - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть две таблицы, в которых есть данные, в одной из которых дата и время электронной почты открыты (отправлены по электронной почте), а другая ссылка нажата (отправлена ​​по электронной почте) человеком.Я пытаюсь объединить данные в одну таблицу с открытыми и щелчками по электронной почте.

| ID | EmailopenedDateTime|     | ID | EmailClickedDateTime  |
| 1  | 2019-07-02 22:05:26|     | 1  | 2019-07-02 22:05:41   |  
| 2  | 2019-07-03 22:44:14|

Я пытался использовать правильное соединение, но получаю вывод как

| ID | EmailopenedDateTime| EmailClickedDateTime  |
| 1  | 2019-07-02 22:05:26| 2019-07-02 22:05:41   |  
| 2  | 2019-07-03 22:44:14| 2019-07-02 22:05:41   |

Select 
         emailopened.id,
         emailclick.EmailClickedDateTime
         emailopened.EmailopenedDateTime
    from emailclicked emailclick
    right join
         emailopened  emailopened
    on
         emailclick.id = emailopened.id 

Но выводя ожидаю, что это будет

| ID | EmailopenedDAteTime| EmailClickedDateTime  |
| 1  | 2019-07-02 22:05:26| 2019-07-02 22:05:41   |  
| 2  | 2019-07-03 22:44:14|         NULL          |

Буду также признателен, если pyspark будет полезен.

Ответы [ 3 ]

1 голос
/ 19 сентября 2019

Возможно, имеет смысл использовать LEFT OUTER JOIN, при этом электронная почта открыта как левая таблица, учитывая ваши выходные данные (левая колонка - это та, с которой вы связываетесь, а правая колонка с NULL - нет).Также, как заявил комментатор, вы сравниваете яблоки с апельсинами в своем вопросе.Вы указываете, что ID является ключом, но затем указываете номер ссуды в своем примере запроса.

CREATE TABLE #a ( ID int, EmailOpenedDateTime DATETIME )
CREATE TABLE #b ( ID int, EmailClickedDateTime DATETIME )
INSERT INTO #a ( ID, EmailOpenedDateTime ) VALUES ( 1, '2019-07-02 22:05:26' ), ( 2, '2019-07-03 22:44:14' )
INSERT INTO #b ( ID, EmailClickedDateTime ) VALUES ( 1, '2019-07-02 22:05:41' )

Select 
  emailopened.id,
  emailopened.EmailopenedDateTime,
  emailclick.EmailClickedDateTime
from
  #a emailopened
  left join #b emailclick
    on emailclick.id = emailopened.id

Результат:

id|    EmailopenedDateTime|   EmailClickedDateTime|
 1|2019-07-02 22:05:26.000|2019-07-02 22:05:41.000|
 2|2019-07-03 22:44:14.000|                   NULL|
0 голосов
/ 19 сентября 2019

НАСТОЯТЕЛЬНО рекомендуем зайти на images.google.com, выполнить поиск «SQL Join» и просмотреть все симпатичные диаграммы Венна между двумя наборами, которые включают в себя T-SQL, чтобы их реализовать.Пока что это лучший инструмент обучения, который я видел в быстром понимании различных объединений таблиц.

Удачи.

0 голосов
/ 19 сентября 2019

Если мы буквально поместим ваши данные, как описано:

DECLARE @emailopened TABLE (ID int, EmailopenedDateTime datetime)
INSERT INTO @emailopened VALUES (1, '2019-07-02 22:05:26'), (2, '2019-07-03 22:44:14')

DECLARE @emailclicked TABLE (ID int, EmailClickedDateTime datetime)
INSERT INTO @emailclicked VALUES (1, '2019-07-02 22:05:41')

Select 
         emailopened.id,
         emailclick.EmailClickedDateTime,
         emailopened.EmailopenedDateTime
    from @emailclicked emailclick
    right join
         @emailopened  emailopened
    on
         emailclick.id = emailopened.id 

, то получится такой вывод:

id          EmailClickedDateTime    EmailopenedDateTime
----------- ----------------------- -----------------------
1           2019-07-02 22:05:41.000 2019-07-02 22:05:26.000
2           NULL                    2019-07-03 22:44:14.000

Это соответствует предоставленным вами данным и ожидаемому выводу, так чтолучшее, что мы можем предложить для ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...