私はselectを書き留めて、データベースに存在しないすべてのアイテムを表示しようとしています。 TBL795という名前のテーブルがNRBEMという名前の列にあり、そこにギャップがないとします。sqliteデータベースのギャップを選択する方法
これらの数字が順番に、次のとおりです。
は、この方法でなければなりません。
彼らはこのように見えた場合は、次のいくつかの項目がテーブルに挿入されていないため、彼らは、間違っているだろう
。
何千もの項目がある表では、ギャップがあるかどうか、欠落している項目を見つけることは非常に困難です。私はそのすべての項目を見ることができます
INSERT INTO TESTE
WITH RECURSIVE
cnt(NRBEM) AS (VALUES(1) UNION ALL SELECT NRBEM+1 FROM cnt WHERE NRBEM <100000)
SELECT NRBEM FROM cnt A
と、この選択
SELECT A.NRBEM FROM TESTE A LEFT JOIN TBL795 B
ON A.NRBEM = B.NRBEM
WHERE B.NRBEM IS NULL
を実行している:
CREATE TABLE TESTE (
NRBEM VARCHAR(15))
このようなコマンドでそれを養う:
一つの解決策はこのことでしょう私のテーブルには欠けている。コマンド以来
:
SELECT NRBEM FROM (
WITH RECURSIVE
cnt(NRBEM) AS (VALUES(1) UNION ALL SELECT NRBEM+1 FROM cnt WHERE NRBEM <100000)
SELECT NRBEM FROM cnt) A LEFT JOIN TBL795 B
ON A.NRBEM = B.NRBEM
しかし、これは動作しません:
WITH RECURSIVE
cnt(NRBEM) AS (VALUES(1) UNION ALL SELECT NRBEM+1 FROM cnt WHERE NRBEM <100000)
SELECT NRBEM FROM cnt
は、私はこのような選択を実行したい仮想テーブルを作成します。
この方法:
SELECT X FROM (
WITH RECURSIVE
cnt(X) AS (VALUES(1) UNION ALL SELECT X+1 FROM cnt WHERE X <100000)
SELECT X FROM cnt) A LEFT JOIN TBL795 B
ON A.X = B.NRBEM
それは動作しますが、右の項目を選択しません。
どうすればこの選択を書くことができますか?
実際には最初の試みは、NOT INを使用していたが、それはdidnの私はLEFT JOINに移動しました。(VALUES(40)UNION AS RECURSIVE CNT(X)WITH( から選択したX ALL CNT WHERE FROM X + 1を選択します。しかし、私は欠けていたものを私が最初にこのように選択を書き直した番号へのキャストがいたことが分かった今後= 40 AND NRBEM <= 50) Xとそれも働きました。 –