我查询我的数据库以从不同的表中提取一些信息。我已经设法得到一个可以接受的结果,我可以在SQL之外使用它。我得到的结果非常低效,我想知道是否有办法让SQL做一些工作。基本上,我需要更有效地对数据进行分组并丢弃其中的一些数据。
我当前的查询结果表格可以简化如下:
product_id | person_id | person_type | person_address | other_column
1 | 1001 | 1 | 999 Main St | info about product 1
1 | 1245 | 0 | | info about product 1
1 | 5133 | 2 | 101 Sql St | info about product 1
1 | 9191 | 0 | 1 Query Ave | info about product 1
2 | 5451 | 1 | 40 Table Rd | info about product 2
2 | 6610 | 0 | | info about product 2
我想GROUP BY product_id
,但如果person_id
保持单独的person_address
和person_type=0
。然后连接共享相同person_id
的所有product_id
的地址。只保留other_column
中的一个值。
如果应用于上表,它应如下所示:
product_id | person_id | person_address | other_address | other_column
1 | 1245 | | 999 Main St; 101 Sql St; 1 Query Ave | info about product 1
1 | 9191 | 1 Query Ave | 999 Main St; 101 Sql St | info about product 1
2 | 6610 | | 40 Table Rd | info about product 2
-
或者,第二个最佳解决方案如下:
GROUP BY product_id
,保留person_id
person_type=0
product_id
,如果多个人共享person_address
,请联系他们,连接other_column
,并保留product_id | person_id | person_address | other_column
1 | 1245; 9191 | 999 Main St; 101 Sql St; 1 Query Ave | info about product 1
2 | 6610 | 40 Table Rd | info about product 2
other_column
}}。结果应该如下表所示:
person_id
-
为了给出一些背景知识,我有两个目标:第一个是提取person_address
但是丢弃不必要的重复项。文本信息非常繁重。
第二个目标是能够为那些没有{{1}}的{{1}}获取部分位置信息。
(我试着寻找类似的问题,没有找到任何东西。)
答案 0 :(得分:0)
select
t1.product_id, t1.person_id,
t1.person_address,
group_concat(t2.person_address) as other_address
from Table1 as t1
left outer join Table1 as t2 on
t2.product_id = t1.product_id and t2.person_id <> t1.person_id
where t1.person_type = 0
group by t1.product_id, t1.person_id
<强> sql fiddle demo 强>