我有一个包含id
和alias
id | alias
------|------------------
1 | green
2 | red maroon sunset
3 | blue navy
我需要获取单个标记的列表,即SELECT ... FROM color
以这样的形式返回结果:
1 => green
2 => red
2 => maroon
2 => sunset
3 => blue
3 => navy
有没有办法直接在SQL中拆分/取消组合别名?在不改变数据库结构(和代码)的情况下,最好的方法是什么?
更新
不幸的是,这是一个无法轻易更改的系统,我们没有足够的资源来重写所有连接的系统/ API ......所以也许有人知道这种情况的良好/可行解决方案。
答案 0 :(得分:1)
我有一个整数表(0-9)......
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,alias VARCHAR(100) NOT NULL
);
INSERT INTO my_table VALUES
(1,'green'),
(2,'red maroon sunset'),
(3,'blue navy');
SELECT DISTINCT x.id
, SUBSTRING_INDEX(SUBSTRING_INDEX(x.alias,' ',i.i+1),' ',-1) alias
FROM my_table x
, ints i -- my integers table
ORDER
BY id
, i;
+----+--------+
| id | alias |
+----+--------+
| 1 | green |
| 2 | red |
| 2 | maroon |
| 2 | sunset |
| 3 | blue |
| 3 | navy |
+----+--------+