MySQL 将多列选择为一列

标签 mysql sql select concatenation

我有两张 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 而不是 CONCATWHERE 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/

相关文章:

mysql - 从 SELECT 查询中得到相反的结果

php - 从定义的子集中搜索列中值的所有组合

mysql - 加入 NULL

Mysql View 在表为空时返回数据

sql - 为 SQL Server 中的表中的用户生成随机 token (唯一 ID)

sql - 事务内部的 SELECT 语句与事务外部的 SELECT 语句之间有区别吗?

Java Hibernate 表映射

java - 无法找到 Derby 数据库,如何在 Java 中连接

php - 如何使用 newQuery() 在 Laravel 中为表添加别名

mysql - sql中计数不为空