我有两张 table
卡片索引
+-----+-----+-----+-----+
| uid | id1 | id2 | id3 |
+-----+-----+-----+-----+
| 1 | 125 | 129 | 145 |
| 2 | 127 | 128 | 132 |
+-----+-----+-----+-----+
和卡数据
+----+------------+----------+...
| id | last_use | active |
+----+------------+----------+...
| 125| 10-07-2014 | true |
| 127| 27-02-2014 | true |
| 128| 15-06-2014 | true |
| 129| 10-01-2013 | false |
+----+------------+----------+... and so on
我想通过“card_index”中的“uid”选择“card_data”中的所有数据,因此“uid”= 1 的结果应如下所示:
+----+------------+----------+
| id | last_use | active |
+----+------------+----------+
| 125| 10-07-2014 | true |
| 129| 10-01-2013 | false |
| 145| 13-01-2013 | true |
+----+------------+----------+
我执行的 SQL 查询是:
SELECT * FROM card_data WHERE id IN (SELECT CONCAT(id1,',',id2,',',id3) FROM card_index WHERE uid = 1);
但是它只选择第一行:
+----+------------+----------+
| id | last_use | active |
+----+------------+----------+
| 125| 10-07-2014 | true |
+----+------------+----------+
有人可以帮助我吗?我不知道出了什么问题。 我正在使用 mysql-server 5.5.38-log,从 FreeBSD 上的源代码编译
最佳答案
使用 INNER JOIN
而不是 CONCAT
和 WHERE id IN
的组合对我有用。
这是查询:
SELECT * FROM card_data
INNER JOIN card_index ON id1=id OR id2=id OR id3=id
WHERE uid = 1;
以及期望的结果:
+----+------------+----------+
| id | last_use | active |
+----+------------+----------+
| 125| 10-07-2014 | true |
| 129| 10-01-2013 | false |
| 145| 13-01-2013 | true |
+----+------------+----------+
关于MySQL 将多列选择为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720706/