0

ここに投稿するのはこれが初めてです!良い返事をもらいたいです。

2つのテーブルがあり、パスに基づいて、table1の名前でtable2の名前を見つけて''に置き換える必要があります。

table1
+---------------+----------+
| name          | path     |
+---------------+----------+
| John Smith    | 12345    |
+---------------+----------+
| John Smith    | 54321    |
+---------------+----------+
| JohnSmith     | 12345    |
+---------------+----------+

table2
+---------------+----------+
| name          | path     |
+---------------+----------+
| John          | 12345    |
+---------------+----------+
| Smith         | 54321    |
+---------------+----------+

the final result would be like
+---------------+----------+
| name          | path     |
+---------------+----------+
| Smith         | 12345    |
+---------------+----------+
| John          | 54321    |
+---------------+----------+
| JohnSmith     | 12345    |
+---------------+----------+

ご覧のとおり、完全に一致するものだけを置き換える必要があります。したがって、JohnSmithでは、Johnを削除しません。

問題はまた、mysqlクエリでのみそれを行うのですか?または、そのようなものにはいくつかのphpも必要ですか?

前もって感謝します。


どちらのクエリも近いですが、出力として必要なものを正確に提供していません。

例:最初のものは

NAME        PATH
Smith       12345
John        54321
Smith       12345

ここで最後の行は変更しないでください。完全に一致するものがないため。行は同じ「JohnSmith」のままである必要があります

2つ目では、出力は

NAME        PATH
Smith       12345
John Smith  54321
JohnSmith   12345

ここでは、「Smith」を削除する必要があるため、2行目が間違っているようです。

何か案が ?

4

2 に答える 2

0

これは近いですが、私は確かにあなたの最後の状態を理解していません-それはスミス/ 12345ではないでしょうか?これは以下を使用しますREPLACE

SELECT REPLACE(t1.Name, t2.Name, '') Name, t1.Path
FROM Table1 t1
  LEFT JOIN Table2 t2 ON t1.path = t2.path

そして、これがSQLFiddleです。

- 編集 -

これは、CASEステートメントを使用した試みです。途中、最初、または最後にチェックします。

SELECT 
  CASE 
    WHEN t1.Name Like CONCAT('% ',IFNULL(t2.Name,''),' %')
    THEN REPLACE(t1.Name, CONCAT(' ',IFNULL(t2.Name,''),' '), ' ') 

    WHEN t1.Name Like CONCAT(IFNULL(t2.Name,''),' %')
    THEN REPLACE(t1.Name, CONCAT(IFNULL(t2.Name,''),' '), '') 

    WHEN t1.Name Like CONCAT('% ',IFNULL(t2.Name,''))
    THEN REPLACE(t1.Name, CONCAT(' ',IFNULL(t2.Name,''),' '), '') 

    ELSE
       t1.Name

END Name, t1.Path
FROM Table1 t1
  LEFT JOIN Table2 t2 ON t1.path = t2.path

そしてもっとフィドル

次の結果が生成されます。

NAME        PATH
Smith       12345
John Smith  54321
JohnSmith   12345
于 2013-02-17T14:57:39.253 に答える
0

これは仕事をします:

SELECT 
    REPLACE(CONCAT(' ',t1.Name,' '), 
    CONCAT(' ',t2.Name,' '), '') Name, 
    t1.Path
FROM 
    Table1 t1
LEFT JOIN 
    Table2 t2 ON t1.path = t2.path
于 2013-02-18T11:32:17.623 に答える