MySQL将多列选择为一列
我有两张桌子 卡片索引MySQL将多列选择为一列,mysql,sql,select,concat,Mysql,Sql,Select,Concat,我有两张桌子 卡片索引 +-----+-----+-----+-----+ | uid | id1 | id2 | id3 | +-----+-----+-----+-----+ | 1 | 125 | 129 | 145 | | 2 | 127 | 128 | 132 | +-----+-----+-----+-----+ 和卡片数据 +----+------------+----------+... | id | last_use | active | +----+----
+-----+-----+-----+-----+
| 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服务器5.5.38-log,它是从FreeBSD上的源代码编译而来的,使用的是
内部连接,而不是CONCAT
和的组合,其中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 |
+----+------------+----------+
我建议先对数据进行标准化。合并表格不是更容易吗<代码>id1=id或id2=id或id3=id上的内部连接
@kjtl,通过标准化数据,您的意思是什么。我不能改变这些桌子。我得把每件事都返工else@adirohan谢谢你,现在开始工作了。