MySql选择,替换,INSTR

时间:2013-10-01 05:36:29

标签: mysql

我有两个不直接相关的表:datalocations以及列

locations : id (serial number) name and code

data : locCodes,其中包含“| loc1 | loc2 | loc3 |”的定位代码分隔列表。

我想将locCode中的data替换为来自id的{​​{1}}。我试一试,但无法得到它。

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

locations

请参阅http://sqlfiddle.com/#!2/02379/3

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

引发有关FROM的错误。对MySql来说很新,任何指导都表示赞赏。

1 个答案:

答案 0 :(得分:1)

Manisha,我不知道如何在Mysql中实现以下T-SQL。

给我一些时间来找到一种方法,(在你之间也可以尝试转换)

SQL Server

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 Answer Fiddle

<强>的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 Answer Fiddle