【问题标题】:MYSQL INSERT getting data from INNER JOINMYSQL INSERT 从 INNER JOIN 获取数据
【发布时间】:2013-03-14 02:09:23
【问题描述】:

我有两张表(一张小,一张大)使用相同的唯一键,但列不同。

我需要将大表中的两列带入小表中,但仅用于小表中存在的键。

当我查询它时,我使用 INNER JOIN

SELECT * FROM my_bigtable AS big
  INNER JOIN my_smalltable AS small ON big.key = small.key;

效果很好。但现在我在小表中添加了两列 (fname,lname)。大表有这些列,我想将这些列中的条目拉取为反射键,并将它们放在小表的列中。

INSERT INTO my_smalltable AS small
  SELECT FNAME,LNAME FROM my_bigtable AS big
    WHERE big.FNAME = small.FNAME
      AND big.LNAME = small.LNAME;

这是否只会将小表中存在的唯一键的记录带到小表中,还是将大表中的所有内容都带到小表中,而不管小表中是否存在唯一键?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    试试:

    UPDATE small
    SET small.FNAME = big.FNAME,
    small.LNAME = big.LNAME
    FROM my_smalltable AS small
    JOIN my_bigtable AS big
    ON big.ID = small.ID
    

    (内)连接只会选择小表中存在的记录。

    但是 my_smalltable 和 my_bigtable 确实不应该使用相同的 ID 字段。他们每个人都应该有自己的主键。您可以在两者之间使用外键。例如:

    FROM my_smalltable AS small
    JOIN my_bigtable AS big
    ON big.bigID = small.bigID
    

    其中 bigID 是 my_bigtable 的主键,但 my_smalltable 中的外键(它有自己的主键以及 my_smalltable.smallID。)

    【讨论】:

    • 我认为这个更新语句语法在 SQL Server 中有效,在 MySQL 中无效
    【解决方案2】:

    你需要UPDATE 声明而不是INSERT,试试这个:

    update my_smalltable small
    INNER JOIN my_bigtable AS big ON small.key = big.key
    SET small.FNAME = big.FNAME,
    small.LNAME = big.LNAME
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 2012-02-16
      • 2012-05-30
      相关资源
      最近更新 更多