2016-04-05 23 views
0

değil tamsayı alın ben bu MySQL tablo varveritabanında

Amacım bir kullanıcı girişinden, almak için ise
SELECT * FROM `example` 

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

, hangi tamsayı benim masamda değil 'örnek'. Örneğin, kullanıcı 1, 3, 10 girerse, sonuç boş olmalıdır. Örneğin, 1, 3, 10 girerse, sonuç boş olmalıdır. Kullanıcı 1, 2, 3, 10 girerse, sonuç "2" olmalıdır.

Sayının "örnek" tablosunda olup olmadığını anlamak için tamsayı başına bir MySQL isteği yapmak dışında, bunu yapmanın bir yolunu bulamıyorum. Birisi bir yolu biliyor mu?

+0

Dediğim gibi, sonucu doğrudan bir MySQL isteğiyle almayı tercih ediyorum. Sorun şu ki, MySQL ile familiare değilim, bu yüzden bir yol olup olmadığını bilmek istiyorum, çünkü programımda, tabloda 7'den fazla tam sayı olacak ve 'kullanıcı' bir senaryo olacak 3'ten fazla tamsayı girecek. –

+0

Sağ dış birleştirmeyi kullanarak soldaki tabloda bulunan boş değerleri seçin. – Kason

cevap

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 

dış sağ katılmak ve sol tabloda bu boş kayıt seçin kullanma.

+0

Teşekkürler, bu cevabı "sendika" anahtar kelimesinin başka bir kullanımı gibi görüyorum. Önce ben test edeceğim. Çok teşekkürler. –

1

Sen taksitli tablosunu genereate ve OUTER JOIN kullanabilirsiniz:

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

Çıktı:

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

Bu aralıkta 1-999 çalışacaktır. Gerekirse genişletebilirsin.


bir başka yolu UNION ALL kullanmaktır:

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

Güzel! "Sendika" hilesi bilmiyordum, bunu okuyacağım. Teşekkürler ! –