如何编写查询以将多个字符串聚合到一个字段中?
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'
我正在尝试合并三个 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'