2016-04-05 10 views
0

ではない整数を取得します。私は、このMySQLのテーブルを持つデータベース

create table example (
    My_Id  INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    My_Integer INT UNSIGNED DEFAULT 0 
) ENGINE=InnoDB 

は、この表はそのよう移入すると仮定します。

SELECT * FROM `example` 

My_Id My_Integer 
1  10 
2  1 
3  3 
4  152 
5  16 
6  481 
7  128 

私の目標は、ユーザーの入力から、取得することで、その整数は私のテーブル 'example'にはありません。

たとえば、ユーザーが1,3,10を入力した場合、結果は空になります。 ユーザーが1、2、3、10と入力した場合、結果は「2」になります。

数字がテーブル 'example'にあるかどうかを知るために、整数ごとに1つのMySQLリクエストを行う以外に、方法を見つけることができません。 誰かが方法を知っていますか?

+0

私が言っているように、私は結果を直接MySQLリクエストで得ることを望んでいます。問題は私がMySQLに依存しているわけではないので、私のプログラムではテーブルに7以上の整数が存在するため、方法があるかどうかを知りたいだけで、 'user'はスクリプト3以上の整数を入力します。 –

+0

右外部結合を使用して、左テーブルのそれらの空レコードを選択します。 – Kason

答えて

1
Select numberToMatch 
from example as a 
right outer join (
    select 1 as numberToMatch union all 
    select 2 union all 
    select 3 union all 
    select 10 
) as b 
on b.numberToMatch = a.My_Integer 
where a.My_Integer is null 

左の表に、これらのヌルレコードを結合し、選択します。


もう一つの方法は、UNION ALLを使用することです。

+0

ありがとう、私はキーワード "労働組合"の別の使用のような答えを参照してください。私はまずそれをテストします。どうもありがとう。 –

1

あなたは、集計テーブルをgenereateとOUTER JOINを使用することができます。

SELECT t.n 
FROM (
    SELECT a.N + b.N * 10 + c.N * 100 + 1 n 
    FROM (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
     UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 
     UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a 
    ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
     UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 
     UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b 
    ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
     UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 
     UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c 
    ) t 
LEFT JOIN example e 
ON t.n = e.My_Integer 
WHERE t.n IN (1,2,3,10)  -- here goes numbers 
    AND e.My_Integer IS NULL; 

LiveDemo

出力:

╔═══╗ 
║ n ║ 
╠═══╣ 
║ 2 ║ 
╚═══╝ 

それは範囲1-999で動作します。必要に応じて拡張することができます。右の外側を使用して

SELECT s.col 
FROM (SELECT 1 AS col 
     UNION ALL SELECT 2 
     UNION ALL SELECT 3 
     UNION ALL SELECT 10) AS s 
LEFT JOIN example e 
    ON s.col = e.My_Integer 
WHERE e.My_Integer IS NULL; 

LiveDemo2

+1

ニース!私は "組合"のトリックを知らなかった、私はそれについて読むだろう。ありがとう! –

関連する問題