Mysql 选择“从单个DB行中为每个结果返回一个单词”
我有一个带有列id和别名的DB表 我需要获得单个标签的列表,即选择。。。从颜色返回如下形式的结果:Mysql 选择“从单个DB行中为每个结果返回一个单词”,mysql,Mysql,我有一个带有列id和别名的DB表 我需要获得单个标签的列表,即选择。。。从颜色返回如下形式的结果: 1 => green 2 => red 2 => maroon 2 => sunset 3 => blue 3 => navy 是否有一种直接在SQL中拆分/解组别名值的方法?在不改变数据库结构和代码的情况下,最好的方法是什么 更新 不幸的是,这是一个无法轻易更改的系统,我们没有资源重写所有连接的系统/API。。。所以也许有人知道这种情况下一个好的/有效的解决
1 => green
2 => red
2 => maroon
2 => sunset
3 => blue
3 => navy
是否有一种直接在SQL中拆分/解组别名值的方法?在不改变数据库结构和代码的情况下,最好的方法是什么
更新
不幸的是,这是一个无法轻易更改的系统,我们没有资源重写所有连接的系统/API。。。所以也许有人知道这种情况下一个好的/有效的解决方案。我有一个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 |
+----+--------+
实际上,您应该更改数据库结构。您的表未正常化。切勿在一列中存储多个值!谢谢你的反馈。我知道不同的数据库结构将是最好的解决方案。不幸的是,我们没有修改DB的选项。在这种情况下,上面的示例被简化了,而不是真正的DB内容
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 |
+----+--------+