MySQL:在查询中查询?

时间:2013-01-23 02:32:29

标签: mysql sql sql-insert

简单的问题,我仍然无法弄清楚。我有两张桌子。

Table items: id (INT), text (VARCHAR)
Table shared: type (VARCHAR), account (VARCHAR), id (INT)

说明:

  • 包含推文列表。

  • 共享包含已共享(发送到Twitter)的所有推文的列表。

现在我需要一个查询,它会从表中提供最旧的文本(最小的“id”),该表尚未用于特定的“类型”和“帐户” 共享表。

示例:

数据库看起来像这样。 表中有两个项目,尚未共享任何项目。

Table items: [[1, "First Tweet"], [2, "Second Tweet"]]
Table shared: []

运行查询将返回[1,“First Tweet”]。之后,我将在共享表中插入一个值,如下所示:

Table items: [[1, "First Tweet"], [2, "Second Tweet"]]
Table shared: [["twitter", "my-twitter-account", 1]]

再次运行查询将返回[2,“Second Tweet”]。之后,我将在共享表中插入一个值,如下所示:

Table items: [[1, "First Tweet"], [2, "Second Tweet"]]
Table shared: [["twitter", "my-twitter-account", 1], ["twitter", "my-twitter-account", 2]]

我知道我可以先从项目表中提取所有“id”,然后将它们放入数组中,然后检查是否在共享< / strong>桌子,但我认为这是一个可怕的解决方案......桌子最多可以增加约10,000件物品。

编辑:我修改了JW。的代码,它完美无缺。谢谢!

我的查询:

SELECT a.id, a.text, MIN(a.id) ID
FROM    items a
        LEFT JOIN shared b
            ON a.id = b.id
WHERE   b.id IS NULL

1 个答案:

答案 0 :(得分:2)

尝试使用INSERT..INTO SELECT

INSERT INTO shared (type, account, id)
SELECT 'twitter' type, 'my-twitter-account' account, MIN(a.id) ID
FROM    items a
        LEFT JOIN shared b
            ON a.id = b.id
WHERE   b.id IS NULL