我有两个不直接相关的表:data
和locations
以及列
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来说很新,任何指导都表示赞赏。
答案 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 强>