2016-06-22 6 views

Antwort

3

Sie sollten Ihre Datenstruktur reparieren. Das Speichern von Listen von Dingen als Strings ist in SQL sehr schlecht. Die richtige Art, eine Liste zu speichern, befindet sich in einer Zeile in einer anderen Tabelle mit einer Zeile pro Listenelement.

In Ihrem Beispiel sind beide Listen alphabetisch geordnet. Wenn Sie wissen, dass dies immer der Fall ist, können Sie etwas tun:

select t.* 
from t 
where t.a like '%' || replace(t.b, ';', '%') || %; 

Dies nicht tun, was Sie wollen 100%, aber es kann für Ihre Zwecke nah genug sein.

+0

Ich dachte, '' || bedeutet 'OR'. Aber anscheinend hast du es als eine Kombination * benutzt (etwas wie Punkt '.' in PHP) *. Nun, was ist hier los? Was bedeutet '||' in MySQL? – Alex

+0

@Alex. . . Die Frage bezieht sich auf Oracle. In Oracle (und Postgres- und ANSI SQL und einigen anderen Datenbanken) verkettet '||' Zeichenfolgen. In MySQL kann es abhängig vom ANSI SQL-Modus entweder ein logisches ODER oder eine Verkettung sein. –

+0

Ah ich sehe ... +1 – Alex

1

Doppelte Balken sind Verkettung.

SELECT `first_name`||`last_name` FROM users; 

Sie werden eine Spalte erhalten genannt: first_name || last_name

So Ihre Anfrage where t.a like '%' || replace(t.b, ';', '%') || %;

würde 'a;b;d;e' und Ausgang %a%b%d%e%

+0

Ah ich sehe .. danke +1 – Alex

Verwandte Themen