我正在尝试使用联合表和现有值来填充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。
答案 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;