将行插入多对多表但避免FK查找/子查询

时间:2011-09-18 15:42:24

标签: mysql

我的数据库中有一个很多表,每小时都有数千次推送。让我们说它看起来像:

+-----------------------+
| pageNotes             |
+-----+--------+--------+
| id  | pageid | noteid |
+-----+--------+--------+
| 1   | 37583  | 385839 |
| 2   | 37583  | 385840 |
| ... | ...    | ...    |
+-----+--------+--------+

当我想要更新表时,我只有页面URL(位于表“pages”中,其pageid为pageNotes表中的FK)。我真的想避免在我的代码中缓冲数以万计的记录来进行PK查找,所以我有点好奇,除了子查询之外还有另一种方法来实现这一点。

目前,查询如下:

INSERT INTO 
     `pageNotes ` (id,pageid,noteid) 
     VALUES ('',
       (SELECT id FROM pages WHERE url='http://www.test.com/index.html')
       ,385841);

当然这不可用,因为如果页面不存在,查询将失败。我正在寻找的是获取pk或在FK表中插入行的方法。

1 个答案:

答案 0 :(得分:1)

您可以将查询简化为:

INSERT INTO `pageNotes` (id, pageid, noteid)
SELECT '', p.id, 385841
    FROM pages p
    WHERE url = 'http://www.test.com/index.html';