2017-01-25 5 views
0

Ich habe die folgende SQL-AbfrageOracle Unterabfrage nach wie Fehler

SELECT * FROM users u WHERE 1=1 and u.user_name LIKE 'A%' 

Es funktioniert wie erwartet. Die folgende Zeile führt jedoch zu einer Fehlermeldung.

SELECT * FROM users u WHERE 1=1 and u.user_name LIKE (select '%arthur%' from dual) 

Die Fehlermeldung ist folgende:

ORA-00933 SQL Command not properly ended 

habe ich versucht, die Abfrage mit schließen ";" aber es gibt immer noch den gleichen Fehler. Was könnte diesen Fehler verursachen?

Edit: Ich brauche LIKE und kann nicht IN verwenden, nehmen wir an, wir haben nur einen 'Arthur' in der Benutzerdatenbank.

+0

Mögliches Duplikat von [Verwendung des 'LIKE' -Operators mit einer Unterabfrage, die mehrere Ergebnisse liefert] (http://stackoverflow.com/questions/18049602/using-like-operator-with-a-subquery-that-returns-multiple -Ergebnisse) – JohnHC

+1

'SELECT * FROM DUAL WHERE 'abcd' LIKE (SELECT '% bc%' FRM DUAL);' funktioniert ohne Fehler. Wie rufen Sie diese Aussage auf? – MT0

+1

Syntax scheint korrekt zu sein, wo versuchen Sie diese Anweisung auszuführen? – TheName

Antwort

2

Ihre Abfrage scheint syntaktisch korrekt zu sein. Die Unterabfrage ist eine skalare Unterabfrage, die nur eine Spalte und höchstens eine Zeile zurückgibt.

In der Regel können Sie LIKE mit einer Unterabfrage EXISTS mit verwenden:

SELECT u.* 
FROM users u 
WHERE 1 = 1 AND 
     EXISTS (SELECT 1 
       FROM t 
       WHERE u.user_name LIKE t.col 
      ); 

Wenn Ihre eigentlichen Abfrage komplizierter ist, dann könnte dies Ihr eigentliches Problem lösen.

0

Ich habe die gleiche Abfrage als pro versucht, es hat gut funktioniert.

SELECT * FROM Mitarbeiter e mit 1 = 1 und e.name wie (wählen Sie '% abc%' aus Dual);

Verwandte Themen