4

これは、2 つのテーブルから個別のレコードを正常に選択し、それらを 1 つの列に結合する既存のクエリです。

SELECT index_text AS unique_text FROM words
UNION
SELECT c1index_text FROM words_content 
ORDER BY unique_text

ここで、すべてのレコードを削除したいと思いますWHERE body NOT IN (SELECT body FROM sms)(またはNOT EXISTS、動作するものは何でも問題ありません)。問題は、何を試しても、括弧を使用しようとするたびに構文エラーが発生するか、認識されないことsms.bodyです (すべての列の前に親テーブルがある場合でも)。いくつかの SQLite の制限により、これが必要以上に難しくなっている可能性があると考えていますが、回避策が必要です。以下は、私が失敗したクエリです(これらのクエリのさまざまなバリエーションも試しましたが、役に立ちませんでした)。

SELECT index_text AS unique_text FROM words
UNION
SELECT c1index_text FROM words_content
  WHERE body NOT IN (SELECT body FROM sms)
ORDER BY unique_text

エラーが発生します:No such column: body

SELECT words.index_text AS unique_text FROM words
UNION
SELECT words_content.c1index_text FROM words_content
LEFT JOIN sms
  ON sms.body=unique_text
ORDER BY unique_text

エラーが発生します:No such column: unique_text

エイリアス列に結合して、に存在しないレコードのみを表示するにはどうすればよいsms.bodyですか? ありがとう、

4

1 に答える 1

2

UNION で where または join 句を使用する場合は、それらを両方のselectステートメントに適用する必要があります。

SELECT index_text AS unique_text 
FROM words
where index_text NOT IN (SELECT body FROM sms)
UNION
SELECT c1index_text 
FROM words_content
WHERE c1index_text NOT IN (SELECT body FROM sms)
ORDER BY unique_text
于 2012-11-26T20:15:06.083 に答える