0

直接関係のない2つのテーブルがあります:dataおよびlocations以下の列

locations : id (serial number) name and code

data : locCodes"|loc1|loc2|loc3|"として区切られた場所コードのリストを含む .

locCodeindataidfromに置き換えたいlocations。やってみるが取れない。

このクエリは正しいように見えますが、実際には更新部分を正しく取得できません。

SELECT REPLACE( data.locCodes , CONCAT('|', location.code, '|'), CONCAT('|',     location.id, '|'))
FROM data, location
WHERE INSTR(data.locCodes, CONCAT('|', location.code, '|')) > 0

http://sqlfiddle.com/#!2/02379/3を参照してください。

UPDATE data
SET locCodes = (SELECT REPLACE( data.locCodes , CONCAT('|', location.code, '|'), CONCAT('|', location.id, '|'))
FROM data, location
WHERE INSTR(data.locCodes, CONCAT('|', location.code, '|')) > 0);

FROM に関するエラーをスローします。MySql は非常に新しいため、ガイダンスをいただければ幸いです。

4

1 に答える 1

1

Manisha、Mysql で次の T-SQL を実装する方法がわかりません。

それを行う方法を見つけるために少し時間をください(その間に変換を試みることもできます)

SQLサーバー

select id,locCodes,
    (
        select '|'+cast(l.id as varchar)
        from location l
        where d.locCodes LIKE '%|'+l.code+'|%'
        for xml path('')
    )
    +'|' as abc
from data d
group by id,locCodes

MSSQL アンサー フィドル

MySQL

SELECT  data.*,
(
  SELECT concat('|',Replace(GROUP_CONCAT(location.id ),',','|'),'|')
  FROM location
  WHERE find_in_set(location.code, replace(trim(replace(data.locCodes,'|',' ')),' ',','))
) as locCodes1
FROM data

MySQL アンサー フィドル

于 2013-10-01T06:16:28.450 に答える