假设我在一个包含以下数据的表中有一个MySQL列
1,2,3
。实际上,这些是另一个表的primary_key
。现在,让我说出我想要做的事情。
我想使用comma (,)
对这些内容进行分解,并希望创建一个sub query
来从另一个表中获取信息。
我在这里给出两个表数据,希望能帮助你正确理解..
tableA
------------------------------------
| col1 | col2 | col3 |
------------------------------------
| 1 | Sam | 50 |
------------------------------------
| 2 | Zor | 55 |
------------------------------------
| 3 | Sad | 40 |
------------------------------------
tableB
--------------------------------
| col1 | idFromTableA |
--------------------------------
| 1 | 1,3 |
--------------------------------
| 2 | 1,2 |
--------------------------------
| 3 | 1,2,3 |
--------------------------------
现在,我正在查询tableB
。类似于以下查询 -
SELECT * FROM tableB
我想使用col2
从tableA
中选择idFromTableA
。我知道GROUP_CONCAT
,但我无法理解。
如何使用存储在名为col2
的{{1}}中的id
来选择tableB
值?我想要展开idFromTableA
的值,并希望创建一个子查询以从idFromTableA
获取值。
我可以用这个逻辑来实现这个目标吗?
在@ Phil的建议之后,我正在创建另一个表并按如下方式存储数据 - 这样可以吗?
tableA
答案 0 :(得分:2)
制作联结表以促进多对多关系,例如
CREATE TABLE `tableA_B` (
a_col1 INT NOT NULL, -- or whatever the data type is for the foreign key
b_col2 INT NOT NULL,
PRIMARY KEY (a_col1, b_col1),
FOREIGN KEY (a_col1) REFERENCES tableA (col1),
FOREIGN KEY (b_col1) REFERENCES tableB (col1)
) ENGINE=InnoDB;
然后您可以插入相关数据
INSERT INTO tableA_B (a_col1, b_col1) VALUES
(1, 1), (3, 1),
(1, 2), (2, 2),
(1, 3), (2, 3), (3, 3);
然后你可以执行你的选择......
SELECT b.col1, a.col2
FROM tableB b
INNER JOIN tableA_B ab ON b.col1 = ab.b_col1
INNER JOIN tableA a ON ab.a_col1 = a.col1;
或者,从idFromTableA
...
tableB
列
ALTER TABLE `tableB` DROP COLUMN `idFromTableA`;
您可能希望尝试将逗号分隔值迁移到联结表中,而不是使用上面的INSERT
语句。您可能希望使用可编程客户端界面(如PHP + PDO / mysqli)来执行此操作。