如果MySQL中不存在行,则将行从一个表插入到另一个表中

时间:2016-08-27 01:54:29

标签: mysql sql-insert

当表B中的日期不存在时,我试图将表A中的日期插入表B.我使用了NOT EXISTS函数,但日期似乎没有像我希望的那样填充。

为了给出额外的背景,表B是一个总帐,它可以在一天内有零个或多个交易,而表A是一个资产负债表,每天有一个条目,无论总帐中是否有交易。

这是我使用的SQL代码:

INSERT INTO gl_account_type_descriptions 
  (Company_Name, `Account ID`, `Date`)
SELECT Company_Name,
       `Account ID`,
       `Date`
FROM all_balance_sheet
WHERE NOT EXISTS (
  SELECT DISTINCT Company_Name, Account ID`, `Date`
  FROM gl_account_type_descriptions
  )

2 个答案:

答案 0 :(得分:0)

你遗漏了NOT EXISTS部分内的条件:

INSERT INTO gl_account_type_descriptions 
  (Company_Name, `Account ID`, `Date`)
SELECT Company_Name, `Account ID`, `Date`
FROM all_balance_sheet AS bal
WHERE NOT EXISTS (
  SELECT Company_Name, `Account ID`, `Date`
  FROM gl_account_type_descriptions AS acc
  WHERE bal.Company_name = acc.Company_name
    AND bal.`Account ID` = acc.`Account ID`
    AND bal.`Date` = acc.`Date`
  )

我还删除了多余的DISTINCT子句,因为它不需要并会降低查询速度。

答案 1 :(得分:0)

如果您的AccountId列是唯一的。然后,您可以使用下面的sql

INSERT IGNORE INTO gl_account_type_descriptions (`Account ID`,Company_Name, `Date`)
SELECT DISTINCT `Account ID`,Company_Name, `Date` FROM all_balance_sheet;