Sql 插入缺少的行

Sql 插入缺少的行,sql,Sql,我有一个有趣的SQL难题,我还没能解决,希望你们中的一个比我有更多的SQL Fu。我有两张这样的桌子: tblFormElement FrmElementID Label tblFormSubmissionElement FrmID_fk FrmElementID_fk SubmitID_fk SubmissionValue Label | FrmID_fk | FrmElementID_fk | SubmitID_fk | Submiss

我有一个有趣的SQL难题,我还没能解决,希望你们中的一个比我有更多的SQL Fu。我有两张这样的桌子:

tblFormElement
    FrmElementID
    Label

tblFormSubmissionElement
    FrmID_fk
    FrmElementID_fk
    SubmitID_fk
    SubmissionValue
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
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
如果我运行以下SQL:

SELECT tblFormElement.Label, tblFormSubmissionElement.* FROM tblFormElement
JOIN tblFormSubmissionElement ON FrmElementID = FrmElementID_fk
WHERE FrmID_fk = 55
AND SubmitID_fk = 7062
我将得到如下结果集:

tblFormElement
    FrmElementID
    Label

tblFormSubmissionElement
    FrmID_fk
    FrmElementID_fk
    SubmitID_fk
    SubmissionValue
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
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
现在,如果我将SubmitID_fk更改为7062以下的任何值,我将得到如下结果:

tblFormElement
    FrmElementID
    Label

tblFormSubmissionElement
    FrmID_fk
    FrmElementID_fk
    SubmitID_fk
    SubmissionValue
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
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

使用select查询:

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

这就是你想要的吗?

我想你想要这样的东西

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

可能有一种方法可以使用DISTINCT而不是将FrmElementID_fk与1603匹配,但我认为这也应该起作用。

为什么不使用where FrmElementID_fk 1604作为条件?它是AND而不是&&forSQL@Andomar谢谢我太习惯于使用mysql了,我甚至都没发现它不是。