提问者:小点点

msql基于另外两个表中的值将数据插入表中


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

  • 用户表的列包括id、first_name和last_name等...
  • 文档表的列包括id和用户,其中用户列包含逗号分隔的值
    • 例如乔·布洛格斯,弗雷德·内克,西蒙·麦克库尔等...

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

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

    并将其插入documentShips表中,例如:

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

    我正在努力创建一个有效的(mysql)insert语句来实现这一点。

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

    谢谢你,乔恩。


共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演示

为了使其正常工作,您必须确保文档中的值以逗号分隔。作者在逗号之前或之后没有空格。如果实际上您有空格,那么首先用这样的查询消除它们

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

这里是SQLFiddle演示

现在考虑规范化您的文档表。

匿名用户

使用插入。。。选择MySQL文档中所示的语法。文档中也有一些示例。