2016-03-24 11 views
0

filtern dort eine Tabelle diese Daten haben, istwie nicht exist id einer Tabelle

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

jetzt ich eine ID-Liste haben, möchte ich die in dieser Tabelle ist nicht vorhanden, ist die Wirkung Ich möchte wie diese

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

Also, wenn mysql haben einige praktische Funktion diese Anforderung unterstützen könnte?

Jetzt ist meine Art und Weise ist

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

Mögliche Duplikat [MySQL erhalten IDs aus der Tabelle fehlt] (http://stackoverflow.com/questions/12325132/mysql -get-missing-ids-from-table) – ogres

+0

Warum sollte so etwas benötigt werden? Was ist das Problem, das du hast? – Mjh

+0

@Mjh z.B. Marktabteilung Kollegen geben Ihnen eine Excel-Datei, die viele Kunden mobile hat, und Ihnen sagen, senden Sie eine Art Gutschein für diese Kunden, also möchte ich filtern, welches Handy ist nicht vorhanden in Benutzertabelle, so könnte ihnen sagen, diese Handys zu korrigieren, vielleicht eingeben die falsche Nummer. – zhuguowei

Antwort

1

Es gibt keine solche Funktion in MySQL ist. Sie haben eine in-line-Tabelle zu erstellen, alle IDs enthält, dann LEFT JOIN Tisch, um es:

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 

Prädikat t.id IS NULL erkennt nicht passenden IDs.

0

eine temporäre Tabelle erstellen könnte gehen über in einer anderen von ...

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); 
Verwandte Themen