1

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

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”,将它们放入一个数组中,然后检查“id”是否在共享表中,但我认为这是一个可怕的解决方案......表最多将增长到大约 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
4

1 回答 1

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
于 2013-01-23T02:38:27.840 回答