如何编写查询以将多个字符串聚合到一个字段中?

How can I write a query to aggregate multiple strings into one field?

我正在尝试合并三个 table。 第一个table有id和data_name, 第二个 table data_id、option_id 和 属性, 第三个tableuser_id,data_id。

例如:

first table
+----+-----------+
| id | data_name |
+----+-----------+
| 1  + veri1     |
| 2  + veri2     |
| 3  + veri3     |
+---++-----------+

second table 
+----------+----------+-----------+
data_id    | property | option_id |
+----------+----------+-----------+
| 1        | blue     | 1         |
| 1        | cold     | 2         |
| 2        | gray     | 1         |
| 2        | hot      | 2         |
| 3        | green    | 1         |
| 3        | cold     | 1         |
+----------+----------+-----------+

third table
+----------+-----------+
| user_id  | data_id   |
+----------+-----------+
| 1        | 2         |
| 2        | 3         |
| 3        | 1         |
+----------+-----------+

我想得到:

user: 1
data: veri2
properties: gray - hot

如何为此编写 SQL?

这个查询应该可以做到。但是您的 property 将以逗号分隔,而不是 -.

Select user_id,data_name, GROUP_CONCAT(property)
From Table1 INNER JOIN Table2 ON Table1.id = Table2.data_id
INNER JOIN Table3 ON Table1.id = Table3.data_id
GROUP BY Table1.id

首先从 FROM 子句开始。您想要的数据存储在哪里?

FROM user_first_table
JOIN property_second_table
JOIN user_data_third_table

然后考虑你应该加入的条件(我发现重新排序表格更容易)

FROM user_data_third_table t 
JOIN user_first_table f ON f.id = t.user_id
JOIN property_second_table s ON s.data_id = t.data_id

然后使用 WHERE 子句缩小范围,例如只想要 veri1

的数据
FROM user_data_third_table t 
JOIN user_first_table f ON f.id = t.user_id
JOIN property_second_table s ON s.data_id = t.data_id
WHERE f.data_name = 'veri1'

然后标注你想要的数据字段

SELECT f.id as 'user', f.data_name as 'data', s.property as 'properties'
FROM user_data_third_table t 
JOIN user_first_table f ON f.id = t.user_id
JOIN property_second_table s ON s.data_id = t.data_id
WHERE f.data_name = 'veri1'