2013-06-08 20 views
7

Używam wewnętrzna przyłączyć się do klauzuli podobnego ..Wewnętrzna przyłączyć się jak klauzuli

Moja próbował sql jest

SELECT tbl_songs.id AS sid, 
     tbl_songs.name AS sname, 
     tbl_albums.id AS aid, 
     tbl_albums.name AS aname 
FROM tbl_songs 
     INNER JOIN tbl_albums 
       ON tbl_songs.albums LIKE '%' + tbl_albums.name + '%'; 

Jego pokazuje mi błąd składni.

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '+ tbl_albums.name + '%'' at line 2 

Proszę podać przyczynę błędu składni.

+0

proszę należy pamiętać, że użycie 'LIKE' z wiodącym symbolem wieloznacznym jest szkodliwe dla wydajności. Używanie go z łączeniami jest bardzo szkodliwe dla wydajności. Dobrze by było, gdybyś spróbował wymyślić alternatywne rozwiązanie. – Spudley

Odpowiedz

26

trzeba tworzyć za pomocą klauzuli concat ...

...LIKE CONCAT('%',tbl_albums.name, '%'); 

nie ma + operator tak w mysql

+0

CONCAT w orace przyjmuje tylko dwa argumenty: CONCAT (CONCAT ('%', tbl_albums.name), '%'); –

+0

To prawda, w tym przypadku można użyć dwóch funkcji concat (jak moja oryginalna odpowiedź była). jednak wtedy zobaczyłem, że pytanie było dla mysql specificall, więc dostosowałem to. –

+0

CONCAT z MySQL bierze kilka argumentów. Widząc, jak to pytanie zostało oznaczone jako MySQL, należy odpowiedzieć w ten sposób. 'CONCAT (str1, str2, ...)' [MySQL Dokumentacja] (https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_concat) –

1
You can use below format in oracle sql: 
    SELECT tbl_songs.id AS sid, 
      tbl_songs.name AS sname, 
      tbl_albums.id AS aid, 
      tbl_albums.name AS aname 
    FROM tbl_songs 
      INNER JOIN tbl_albums 
        ON tbl_songs.albums LIKE ('%'||tbl_albums.name||'%'); 
-1

Przykładem MySQL:

SELECT tbl_songs.bus_name FROM tbl_songs , tbl_albums 
WHERE tbl_songs.albums LIKE CONCAT('%',tbl_albums.name, '%'); 
+0

Co? Twoja odpowiedź opiera się na zupełnie innych tabelach i nie masz kontekstu, w jaki sposób pomaga to w udzieleniu odpowiedzi na pytanie. (I szczerze mówiąc, dodatkowy tekst "Sprawdź to na dole" sprawia, że ​​wygląda tak, jakby był źle skopiowany z innego miejsca) – Krease

+0

Co? dlaczego nie możemy użyć zupełnie innych tabel, mamy dwie tabele (bus, chm_master cm), cm jest aliasem chm_master. Zobacz, że to działa poprawnie dla mnie. Nie rozumiem, co dokładnie próbujesz ujawnić tutaj. cm.bus_json to wartość json, w której próbuję znaleźć bus_name. Co w tym złego. Szczerze mówiąc, powinieneś tu wyjaśnić swoje koncepcje. –

+0

Pytanie używa 'tbl_albums' i' tbl_songs' jako tabel. Twoją odpowiedzią jest użycie 'bus' i' chm_master'. To właśnie mam na myśli, gdy mówię, że używasz różnych tabel. Może to zadziałać, jeśli wyjaśnisz, w jaki sposób odpowiada na pytanie, ale jest to po prostu blok kodu, który nie ma kontekstu. – Krease