0

我有两个不直接相关的表:datalocations下面的列

locations : id (serial number) name and code

data : locCodes其中包含一个分隔的位置代码列表,如“|loc1|loc2|loc3|” .

我想用from替换locCodein 。我试一试,但无法得到它。dataidlocations

此查询似乎正确,但我实际上无法正确获取更新片段。

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 回答