2013-02-04 19 views
15

Mögliche Duplizieren:
mysql join query using like?SQL Join auf einer Säule wie eine andere Spalte

ich tun möchte, eine Verknüpfung, wo eine Spalte eine Zeichenfolge aus einer anderen Spalte der Tabelle enthält:

SELECT 
a.first_name, 
b.age 
FROM names a 
JOIN ages b 
ON b.full_name LIKE '%a.first_name%' 

Ist das möglich? Ich benutze MySQL. Natürlich wird die obige Abfrage nicht funktionieren, da das LIKE '% a.first_name%' nur nach der Zeichenkette a.first_name und nicht nach dem tatsächlichen Wert der Spalte sucht.

+0

Wenn Sie einen% am Anfang der Zeichenfolge haben, kann er nicht die Indizes verwenden, die Sie in dieser Spalte b.full_name haben. Ich möchte Sie nur wissen lassen, dass Ihre Leistung schrecklich sein wird, wenn Sie hier eine umfangreiche Datenbank haben. – Jordan

+0

Sie bekommen aber, wonach Sie fragen. Also, wenn der Vorname Jo ist, wirst du Josephine, Josiline, Jobob, Jody, Joseph usw. bekommen. – xQbert

Antwort

24

Sie brauchen nur die Saiten verketten, können Sie auch eine Suche könnte und ersetzen.

SELECT 
    a.first_name, 
    b.age 
FROM names a 
JOIN ages b 
ON b.full_name LIKE '%' + a.first_name + '%' 
+5

Funktioniert besser für mich mit 'ON b.full_name LIKE CONCAT ('%', a.erst_name, '%')' – Alcalyn

13

Sie CONCAT verwenden können:

SELECT 
    a.first_name, 
    b.age 
FROM 
    names a JOIN ages b 
    ON b.full_name LIKE CONCAT('%', a.first_name, '%') 

oder auch LOCATE, dass die Position des ersten Auftretens von a.first_name in b.full_name zurück:

SELECT 
    a.first_name, 
    b.age 
FROM 
    names a JOIN ages b 
    ON LOCATE(a.first_name, b.full_name) 

wenn eine Übereinstimmung da ist, kommen die wird gelingen.

+1

LOCATE() ist interessant, wird das nur einen Wert ungleich null zurückgeben, wenn die Zeichenfolge in b.full_name existiert, und andernfalls false zurückgeben? –

+0

@DonnyP locate gibt 0 zurück, wenn keine Übereinstimmung vorliegt, oder die Position des ersten Vorkommens des Vornamens. 0 gilt als gleichwertig mit False, wenn der Wert> = 1 ist, wird dies als wahr betrachtet – fthiella

Verwandte Themen