簡體   English   中英

MySQL選擇,替換,INSTR

[英]MySql Select, Replace, INSTR

我有兩個不直接相關的表: data和具有以下列的locations

locations : id (serial number) name and code

data : locCodes ,其中包含分隔的位置代碼列表,例如“ | loc1 | loc2 | loc3 |”

我想更換locCodedataidlocations 我嘗試一下,但無法成功。

這個查詢似乎正確,但是我實際上無法正確完成更新。

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非常新,任何指導都值得贊賞。

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答案小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM