Вставка недостающих строк - PullRequest
1 голос
/ 09 августа 2009

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

tblFormElement
    FrmElementID
    Label

tblFormSubmissionElement
    FrmID_fk
    FrmElementID_fk
    SubmitID_fk
    SubmissionValue

И если я запускаю следующий SQL:

SELECT tblFormElement.Label, tblFormSubmissionElement.* FROM tblFormElement
JOIN tblFormSubmissionElement ON FrmElementID = FrmElementID_fk
WHERE FrmID_fk = 55
AND SubmitID_fk = 7062

Я получу набор результатов, который выглядит следующим образом:

Label   | FrmID_fk | FrmElementID_fk | SubmitID_fk | SubmissionValue

Label1  | 55       | 1601            | 7062        | Foo1
Label2  | 55       | 1602            | 7062        | Foo2
Label3  | 55       | 1603            | 7062        | Foo3
Label4  | 55       | 1604            | 7062        | Foo4
Label5  | 55       | 1605            | 7062        | Foo5

Теперь, если я изменю SubmitID_fk на значение ниже 7062, я получу такой результат:

Label   | FrmID_fk  | FrmElementID_fk | SubmitID_fk | SubmissionValue

Label1  | 55        | 1601            | 5011        | Foo1
Label2  | 55        | 1602            | 5011        | Foo2
Label3  | 55        | 1603            | 5011        | Foo3
Label5  | 55        | 1605            | 5011        | Foo5
What I would like to do is execute an INSERT statement for every one of these 
result sets which lack that Label4 row. Or in other words, For each result set 
which does not contain a row with FrmElementID_fk equal to 1604, INSERT the 
row with the respective columns. Any thoughts on how to attack this problem?

Ответы [ 2 ]

2 голосов
/ 09 августа 2009

Я думаю, вы хотите что-то подобное.

INSERT INTO tblFormSubmissionElement
    SELECT 55, 1604, SubmitID_fk, 'Foo4'
    FROM tblFormSubmissionElement
    WHERE SubmitID_fk < 7026
        AND FrmElementID_fk = 1603;

Возможно, есть способ использовать DISTINCT вместо сопоставления FrmElementID_fk с 1603, но я думаю, что это тоже должно сработать.

0 голосов
/ 09 августа 2009

Используя ваш запрос выбора:

 Insert into OtherTable (
 SELECT tblFormElement.Label, tblFormSubmissionElement.* 
 FROM tblFormElement
      JOIN tblFormSubmissionElement 
      ON FrmElementID = FrmElementID_fk
 WHERE FrmID_fk = 55
 AND SubmitID_fk <> 1604)

Это то, что вы искали?

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