2016-03-24 27 views
0

bir masa var

select * from t; 
+----+------+ 
| id | name | 
+----+------+ 
| 1 | a | 
| 2 | b | 
| 3 | c | 
| 4 | d | 
| 5 | e | 
| 6 | f | 
+----+------+ 

şimdi bir kimliği listesi var bu veriler, bu tabloda mevcut almayan almak istiyorum var, istediğim etkidir Bu

select non_exist(id) from t where id in (1,2,5,7,10) 
7 
10 

gibi yani mysql bu gereksinimi destek verebilecek bazı kullanışlı fonksiyon varsa?

Şimdi yolumu MySQL öyle bir işlev yoktur

cat all_id 
1 
2 
5 
7 
10 

cat all_id | tr '\n' ','|awk '{gsub(/,$/,"");print "mysql -uroot -p123456 test -e '\''select id from t where id in ("$0");'\''"}'|bash>exist_id 

cat exist_id 
id 
1 
2 
5 
comm <(sort all_id) <(sort exist_id) -2 -3 
10 
7 
+2

Olası kopyalar [MySQL tablosundan kimlikleri eksik olsun] (http://stackoverflow.com/questions/12325132/mysql -get-eksik-ids-tablo) – ogres

+0

Neden böyle bir şey gerekli olurdu? Senin sorunun ne? – Mjh

+0

@Mjh örn. Market departmanı çalışanı size birçok müşteri cep telefonuna sahip olan bir excel dosyası verir ve bu müşterilere bir çeşit kupon gönderdiğinizi söyler, bu yüzden kullanıcı tablosunda hangi cep telefonunun bulunmadığını filtrelemek isterim. yanlış numara. – zhuguowei

cevap

1

olduğunu. Bunu tüm kimlikleri içeren bir in-line tablo, daha sonra LEFT JOIN tablo oluşturmak zorunda:

SELECT x.v 
FROM (
    SELECT 1 AS v UNION ALL SELECT 2 UNION ALL SELECT 5 UNION ALL 
    SELECT 7 UNION ALL SELECT 10) AS x 
LEFT JOIN t ON x.v = t.id 
WHERE t.id IS NULL 

Yüklem t.id IS NULL eşleşmeyen kimlikleri tespit eder. Bu konuda gidiş tek yönlü olabilir geçici bir tablo oluşturma

0

...

CREATE TEMPORARY TABLE tempy (id INT); 
INSERT INTO tempy values (1),(2),(5),(7),(10); 
select id from tempy WHERE id NOT IN (select id from t); 
ait
İlgili konular