2016-03-31 12 views
2

Der Ausdruck wurde nicht gefunden, wenn keine Daten in der Datenbank gefunden wurden. Zum Beispiel in meiner Datenbank habe ich nicht 56443 deshalb soll es 'not found'Nullwerte zurückgeben IN-Klausel mysql

SELECT uid, (CASE WHEN (u.uid = null) THEN 'not found' ELSE 'found' END) as result 
FROM (SELECT uid 
      FROM users 
      WHERE uid IN (1,2,56443,3)) as u; 

Erstes Ergebnis drucken, wie

+--------+--------+ 
| uid | result| 
+--------+--------+ 
| 1  | found | 
| 2  | found | 
| 3  | found | 
+--------+--------+ 

folgt ich auch not found Reihe mit 56443

+0

Sie sould verwenden u.uid ist null statt u.uid = null, wie Nullwerte können nicht mit dem Operator = in SQL verglichen werden. –

Antwort

4

Sie müssen einen anderen Ansatz verwenden. Sie benötigen eine Inline-Ansicht mit allen Werten mit der UNION ALL, erstellen und dann Tabelle mit der Benutzer LEFT JOIN:

SQL Fiddle

Abfrage 1:

SELECT a.uid, (CASE WHEN (u.uid is null) THEN 'not found' ELSE 'found' END) as  result 
FROM (select 1 as UID FROM dual 
     UNION ALL 
     select 2 as UID FROM dual 
     UNION ALL 
     select 56443 as UID FROM dual 
     UNION ALL 
     select 3 as UID FROM dual) as a 
LEFT JOIN users u on a.uid = u.uid 

[ Ergebnisse]:

| UID | result | 
|-------|-----------| 
|  1 |  found | 
|  2 |  found | 
|  3 |  found | 
| 56443 | not found | 
+0

Wow. Danke Ich schätze es sehr, – mubeen

+0

Die Abfrage funktioniert in diesem speziellen Fall.Wenn Sie einen anderen Satz von Werten haben, dann müssen Sie diese Abfrage dynamisch bilden, sonst können Sie diese Abfrage nicht verwenden Dummy-Zeilengenerationen in der Anwendungsebene. @mubeen – 1000111

+0

@ 1000111 Vielen Dank für Ihre Sorge, aber Abfrage ist in Ordnung :) – mubeen

1

erwarten Das liegt daran, dass Sie Vergleichen eines Wertes mit null aka. unbekannte. Verwenden Sie immer den Operator IS, wenn Sie mit Nullwerten vergleichen. CASE WHEN (u.uid null ist) THEN ELSE 'gefunden' END) als Ergebnis 'nicht gefunden'

Versuchen Sie stattdessen diese (aktualisiert Antwort):

SELECT u2.uid, (CASE WHEN (u1.uid is null) THEN 'not found' ELSE 'found' END) 
as  result 
FROM users u1 
RIGHT JOIN 
(select 1 as uid union all 
select 2 as uid union all 
select 3 as uid union all 
select 56443 as uid 
) u2 
on u1.uid = u2.uid 
+0

Versuchen Sie es, aber das gleiche Ergebnis :(. – mubeen

+0

Nein, http://www.sqlfiddle.com/#!9/c38d26/1, weil es immer noch keine 56443 in Benutzer –

+0

Geige hier: http: //www.sqlfiddle. com/#! 9/c38d26/20 –