Заполните значения подзапросом из того же запроса - PullRequest
0 голосов
/ 16 мая 2018

Надеюсь, я все правильно объясню.

У меня есть запрос, где я присоединяюсь к нескольким таблицам. Способ настройки системы, когда один столбец заполнен, а другой - пустым, и наоборот. Вот как выглядят результаты моего запроса в данный момент:

    CREATE TABLE mytable(
   mainID INTEGER  NOT NULL PRIMARY KEY 
  ,acctID VARCHAR(4) NOT NULL
  ,emailID INTEGER  NOT NULL
  ,type INTEGER  NOT NULL
  ,created DATE  NOT NULL
);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC123,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC124,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC125,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC126,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC127,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC127,'1/1/2018',12345,NULL,'12345');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ACB234,'1/2/2018',NULL,ABCDEFG,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC567,'1/3/2018',789432,NULL,'789432');
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC980,'1/4/2018',NULL,QRXS,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC980,'1/4/2018',NULL,QRXS,NULL);
INSERT INTO mytable(mainID,acctID,emailID,type,created) VALUES (ABC980,'1/4/2018',NULL,QRXS,NULL);

Вот что я пытаюсь сделать так:

id  date    pid pcid    lid
ABC123  1/1/2018    12345   XYZ 12345
ABC124  1/1/2018    12345   XYZ 12345
ABC125  1/1/2018    12345   XYZ 12345
ABC126  1/1/2018    12345   XYZ 12345
ABC127  1/1/2018    12345   XYZ 12345
ABC127  1/1/2018    12345   XYZ 12345
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ACB234  1/2/2018    98765   ABCDEFG 98765
ABC567  1/3/2018    789432  ZF1 789432
ABC567  1/3/2018    789432  ZF2 789432
ABC567  1/3/2018    789432  ZF3 789432
ABC567  1/3/2018    789432  ZF4 789432
ABC567  1/3/2018    789432  ZF5 789432
ABC567  1/3/2018    789432  ZF6 789432
ABC980  1/4/2018    8675309 QRXS    8675309
ABC980  1/4/2018    8675309 QRXS    8675309
ABC980  1/4/2018    8675309 QRXS    8675309

Вот примерно то, что я пытался: я чувствую, что упускаю из виду что-то очень очевидное и усложняю это, чем это должно быть ...

 SELECT    a.id
           a.date
           b.pid
           b.pcid
           c.lid
    FROM table a
         LEFT JOIN table b
            on a.id = b.id(not bringing this column in)
         LEFT JOIN table c
            on b.pid = c.lid
         WHERE b.pcid IN ( SELECT lid from table c
                          WHERE b.id = c.id)

По сути, я пытаюсь заполнить отсутствующие столбцы из PID, PCID, LID. Когда PCID существует. В таблице B 3 идентификатора. Если pcid заполнен, то pid нет и т. Д. Я хочу заполнить как pid, так и pcid.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

В целях экономии времени я просто отбросил нужные столбцы в другую таблицу и обновил ее там.

0 голосов
/ 16 мая 2018

Ваша первая проблема - вы говорите SQL, что столбцы не могут быть NULL, но вы заполняете строки значениями NULL. В вашей таблице CREATE TABLE последние 3 столбца не должны указывать NOT NULL, если вам нужно, чтобы они содержали значения NULL.

Ваша вторая проблема заключается в том, что вы не указали в своем вопросе, откуда вы получаете значения 'XYZ' или какие-либо другие значения NULL, которые в ожидаемом результате вы, кажется, заполняете значениями из нет нигде. Откуда эти ценности? Трудно ответить, когда вопрос не включает все подсказки.

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