У меня есть интересная головоломка 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?