1

簡単な質問ですが、まだわかりません。私は2つのテーブルを持っています。

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

説明:

  • テーブル項目にはツイートのリストが含まれています。

  • テーブルsharedには、共有された (Twitter に送信された) すべてのツイートのリストが含まれています。

ここで、共有テーブルの特定の「タイプ」と「アカウント」に使用されていない項目テーブルから最も古いテキスト (最小の「id」) を取得するクエリが必要です。

例:

データベースはこんな感じ。アイテムテーブルには 2 つのアイテムがあり、アイテムはまだ共有されていません。

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 に答える