mysql根据另外两个表中的值将数据插入表中

时间:2013-10-23 14:55:43

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

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

  • users表包含id,first_name和last_name等列......
  • 文档表包含id和users列,其中users列包含逗号分隔值
    • E.g。 “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)插入语句来执行此操作。

任何帮助都将非常感谢!!!

谢谢, 乔恩。

2 个答案:

答案 0 :(得分:0)

使用MySQL文档中显示的INSERT...SELECT语法。文档也有一些例子。

答案 1 :(得分:0)

如果我理解正确,您可以像这样使用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表。