【问题标题】:msql insert data into table based on values in two other tablesmysql根据其他两个表中的值将数据插入表中
【发布时间】:2023-04-06 10:02:01
【问题描述】:

我正在使用 MySQL 并且有一个表 (documentShips),我想存储文档和用户之间的连接/链接。

  • users 表包含 id、first_name 和 last_name 等列...
  • documents 表包含 id 和 users 列,其中 users 列包含逗号分隔值
    • 例如“Joe Bloggs、Fred Nerk、Simon McCool”等...

我想使用 like 语句在表(文档和用户)之间匹配用户,例如:

where documents.authors like '% users.last_name %'

并将它们插入到 documentShips 表中,例如:

insert into documentShips (user_id, document_id) ... values () ... where ...

我正在努力创建一个有效的 (mysql) 插入语句来执行此操作。

任何帮助将不胜感激!!!

谢谢, 乔恩。

【问题讨论】:

  • syntex 是 Insert Into documentShips (id,..) select @id.. where 条件。如果您使用的是值,我认为您不能使用 where 子句。

标签: mysql sql join inner-join outer-join


【解决方案1】:

使用INSERT...SELECT 语法,如 MySQL 文档中所示。该文档也有一些示例。

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以像这样使用FIND_IN_SET()

    INSERT INTO documentShips (user_id, document_id)
    SELECT u.id, d.id 
      FROM documents d JOIN users u
        ON FIND_IN_SET(CONCAT(u.first_name, ' ', u.last_name), d.authors) > 0
     ORDER  BY d.id, u.id
    

    这里是SQLFiddle演示

    为了使其正常工作,您必须确保document.authors 中的逗号分隔值在逗号前后没有空格。如果事实上你有空格,那么首先用这样的查询消除它们

    UPDATE documents
       SET authors = REPLACE(REPLACE(authors, ' ,', ','), ', ', ',');
    

    这里是SQLFiddle演示

    现在考虑规范化您的documents 表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多