具有多个表的高级MySQL插入

时间:2014-03-23 23:21:38

标签: mysql database insert sql-insert

我正在尝试使用联合表和现有值来填充MySQL中的列。

我有两张桌子 -

__________________________
|          papers        |   
| paperid | title | year |   
| 1.0.2   | Awed  | 1999 |   
_______________________________________
|           citations                 |
| title | year | paperid | refPaperID |
| othP  | 1999 | 1.3.4.5 | NULL       |

我想在每行中填写citations.refPaperID列,其中paper.paperid与论文中的行有一个匹配的citations.title LIKE papers.title + citations.year = papers.year。

2 个答案:

答案 0 :(得分:1)

试试这个:

UPDATE citations SET
citations.refPaperID = (SELECT papers.paperid
                        FROM papers
                        WHERE citations.title = papers.title
                        AND citations.year = papers.year)

但要使其正常工作,SELECT查询必须匹配并返回一条记录,这意味着引文表中的记录必须具有唯一的标题+年份组合。

修改

MySQL没有FIRST()LAST()的实现,因此要获得第一个匹配项,您可以像这样使用LIMIT 1

UPDATE citations SET
citations.refPaperID = (SELECT papers.paperid
                        FROM papers
                        WHERE citations.title = papers.title
                        AND citations.year = papers.year
                        LIMIT 1)

答案 1 :(得分:0)

我倾向于用join

来做这件事
update citations c join
       papers p
       on c.title = p.title and
          c.year = p.year     
    set c.refPaperID = p.paperid;