[英]MySQL - Replacing Portion of String Based on Rows
所以我有一張桌子。 為了簡化,我會說它有name
和category
列。
一些例子:
name category
Juice: Apple 3
Beer: Miller 4
Cat Food 9
Juice 0
Beer: Molson 4
Juice: Orange 3
Dog Food 9
Beer 0
我想做的是格式化一個查詢,該查詢將找到所有category = 0
,然后從其他結果中刪除那些后跟冒號的名稱(如果它們包含它們)。 見下文:
name category
Apple 3 <- Instead of Juice: Apple
Miller 4 <- Instead of Beer: Miller
Cat Food 9
Juice 0
Molson 4 <- Instead of Beer: Molson
Orange 3 <- Instead of Juice: Orange
Dog Food 9
Beer 0
這可能嗎?
謝謝!
編輯:我發現以下工作 - 這是一個壞方法嗎?
SELECT
category,
REGEXP_REPLACE(
name,
CONCAT( '(', ( SELECT GROUP_CONCAT( name SEPARATOR '|' ) FROM items WHERE category = 0 ), '): ' ),
''
) AS name
FROM
tablename;
使用表的自LEFT
連接和CASE
表達式:
SELECT CASE
WHEN t2.name IS NULL THEN t1.name
ELSE SUBSTRING_INDEX(t1.name, ': ', -1)
END name,
t1.category
FROM tablename t1 LEFT JOIN tablename t2
ON t1.name LIKE CONCAT(t2.name, ':%') AND t2.category = 0
或存在:
SELECT CASE
WHEN EXISTS(SELECT 1 FROM tablename t2 WHERE t1.name LIKE CONCAT(t2.name, ':%') AND t2.category = 0)
THEN SUBSTRING_INDEX(t1.name, ': ', -1)
ELSE t1.name
END name,
t1.category
FROM tablename t1
見演示。
結果:
> name | category
> :------- | -------:
> Apple | 3
> Miller | 4
> Cat Food | 9
> Juice | 0
> Molson | 4
> Orange | 3
> Dog Food | 9
> Beer | 0
如果我沒有誤解,這樣的事情不會起作用嗎?
SELECT
SUBSTRING_INDEX(tablename.name, ': ', -1) as name,
`tablename`.`category`
FROM
`tablename`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.