2016-04-21 4 views
0

Ich versuche, eine SQL-Anweisung, mit einer where-Klausel auszuführen, die etwas tut, wie:HSQL ausführen Zustand wie jedes

WHERE col LIKE ANY (values...) 

Nach dem HSQLDB documentation es mir scheint, dass ich in der Lage sein sollte, tun Sie es:

condition 
     { ... 
     | value [NOT] LIKE value [ESCAPE] value } 

value 
     [+ | -] { term [{ + | - | * |/| || } term] 
     | (condition) 
     | function ([parameter] [,...]) 
     | selectStatement giving one value 
     | {ANY|ALL} (selectStatement giving single column) 

Dies scheint jedoch nicht zu funktionieren.

Ich kann dies auszuführen:

SELECT * FROM table WHERE col LIKE (selectStatement giving 1 column with single value) 

Aber jeder von ihnen gibt mir eine Fehlermeldung:

SELECT * FROM table WHERE col LIKE (selectStatement giving 1 column with multiple values) 
-> cardinality violation 


SELECT * FROM table WHERE col LIKE ANY (selectStatement giving 1 column with single value) 
SELECT * FROM table WHERE col LIKE ANY (selectStatement giving 1 column with multiple values) 
-> unexpected token: SELECT 

Können Sie mir helfen, zu verstehen, was ich falsch mache? Wird dies nicht unterstützt oder missverstehe ich die Dokumentation?

Danke!

+1

Hinweis des Kommentar in der Führungs-Seite „Dieser Leitfaden verknüpft ist für HSQLDB Version 1.8.0 Für die neueste Version siehe HSQLDB Version 2.x Guide. ". Die Spezifikationen in 1.8.0 Leitfaden wurden schlecht geschrieben und können nicht zuverlässig sein. – fredt

+0

... Ich fühle mich wie ein Idiot, weil ich das nicht bemerkt habe. Vielen Dank! Es stellt sich heraus, dass es nicht möglich ist, laut 2.x Guide. Ich denke, ich bin dabei, einige benutzerdefinierte SQL-Funktionen zu machen. Danke, aber ich habe mir wirklich den Kopf darüber verstaucht, warum es nicht funktioniert hat! –

Antwort

0

Je nachdem, was Sie erreichen wollen, können Sie das folgende verwenden:

Diese Abfrage verwendet den Wert von der Unterabfrage für LIKE-Vergleich zurück. Der Wert hat normalerweise ein Escape-Zeichen, zum Beispiel super%, die alle Worte mit super Anfang Spielen:

SELECT * FROM table WHERE col LIKE (selectStatement giving 1 column with single value) 

Diese Abfrage der Werte verwendet, von der Unterabfrage als Liste zurückgegeben. Jeder der Listenwerte wird mit dem col-Wert verglichen, und wenn die erste exakte Übereinstimmung gefunden wird, ist das Ergebnis wahr. Diese Art der Abfrage verwendet wird, eine Teilmenge der Zeilen aus der Tabelle zurückzugeben, die einen Wert haben, in der Liste ist von der Unterabfrage zurückgegeben:

SELECT * FROM table WHERE col = ANY (selectStatement giving 1 column with multiple values) 
+0

Danke, aber für diesen Fall musste ich wirklich ANY mit dem Operator% verwenden, da ich für alle Strings filtern muss, die mit den ausgewählten Werten beginnen, also wird '=' hier leider nicht funktionieren. –

Verwandte Themen