0

次のクエリを実行すると、
select * from tabla where codigo in (33,34,55,10,22,50);
msyqlはクエリに一致するレコードを表示します。

しかし、データベースにないこのクエリ(33,34,55,10,22,50)のレコードを知りたい場合はどうすればよいですか?
自分でレコードを1つずつ比較せずにそれを知る方法はありますか?

すみません、よく説明できません。これにより、データベースにはあるがクエリと一致しないレコードが表示されます。このレコード(33、34、55、10、22、50)のどれがデータベースにないのか知りたいです。

4

2 に答える 2

2

使用しない:

select * from tabla where codigo NOT in (33,34,55,10,22,50); 

アップデート

この新しい説明に照らして、これを行います:

SELECT n.id
FROM
  (SELECT 33 AS codigo
   UNION SELECT 34
   UNION SELECT 55 
   UNION SELECT 10
   UNION SELECT 22 
   UNION SELECT 50) AS n
LEFT JOIN tabla USING (codigo)
WHERE tabla.codigo IS NULL;

残念ながら、MySQL (および他の多くのシステム) は、まだテーブルにない任意の数字のリストを使用する簡単な方法を提供していません。これを動的に行う必要がある場合は、ハードコーディングされた UNION のバッチの代わりに、これらの数値を一時テーブルに追加することをお勧めします。または、再利用可能な数値テーブルを生成し (これはかなり便利だと思います)、そこから値を使用します。例えば:

SELECT nt.id
FROM numbers_table nt
LEFT JOIN tabla ON nt.id = tabla.codigo
WHERE nt.id IN (33,34,55,10,22,50)
  AND tabla.codigo IS NULL
于 2013-01-24T22:30:24.673 に答える
2

これを試してみてください

set @suggest_value:=10;   // <---10 is the lowest value
select codigo,
@suggest_value:=@suggest_value+1,
if(codigo=@suggest_value, 0, 1) as missing_value
from tabla
于 2013-01-24T22:52:14.180 に答える