用相同的值SQL组项目在同一个表中的另一列

问题描述 投票:1回答:1

image of resource table

上面的影像是一个网站的资源表的图像正在建设一个Android应用程序。请为我的英语不好,差的解释对不起,我会尽量解释,以尽我所能。我有一个表称为资源,如下所示,这是另一张表称为产品的一部分。产品表就是关于产品的信息存储,而资源表是其中存储的图像名称和存储方向。每个图像具有一个单独的线。现在,如果我尝试运行一个查询链接或加入的产品和资源表我开始越来越因为资源的图像的复制/重复的输出值。

下面是产品表

  pk_i_id | fk_i_user_id | p_name | p_description |  etc
    1       4              iphone     Iphone X  
    2       4              Cloth      Gucci     
    3       6              watch      Rolex Watch   
    4       3              car        Venza     
    5       7              tractor    CAT   
    6       9              Fruits     Melon     

下面是资源表

pk_i_id | fk_i_item_id | s_name | s_extension | s_content_type | s_path
    1     2             xDSDki0F    jpg         image/jpeg       oc-content/uploads/0/
    2     2             GAsk8vqW    jpg         image/jpeg       oc-content/uploads/0/
    3     3             D033Znu1    jpg         image/jpeg       oc-content/uploads/0/
    4     3             yZSPKeCj    jpg         image/jpeg       oc-content/uploads/0/
    5     5             rc8wCLOQ    jpg         image/jpeg       oc-content/uploads/0/
    6     5             tUWBh6vk    jpg         image/jpeg       oc-content/uploads/0/
    8     6             v3rSPl9s    jpg         image/jpeg       oc-content/uploads/0/
    9     7             8FTuKvgl    jpg         image/jpeg       oc-content/uploads/0/
    10    7             fzb2KzYq    jpg         image/jpeg       oc-content/uploads/0/
    11    7             9Qs7MgUl    jpg         image/jpeg       oc-content/uploads/0/
    12    8             3HmpjxC7    jpg         image/jpeg       oc-content/uploads/0/
    13    8             VF4M6PrE    jpg         image/jpeg       oc-content/uploads/0/
    14    8             tnIH7LqU    jpg         image/jpeg       oc-content/uploads/0/
    15    8             M5jKALrD    jpg         image/jpeg       oc-content/uploads/0/
    16    9             vBBSSfoD    jpg         image/jpeg       oc-content/uploads/0/

如果我做这样的查询

select * products p, resource r where p.pk_i_id=r.fk_i_item_id

它会给我多重复查询由于资源的图像存储的多个部分。如果关于汽车图像是3查询将显示三次车的重复查询。

从上表来看,如果我试图从这里开始使用这个下面的查询来获取”

select * from osoe_t_item_resource

它会显示所有在应用上述那些表值。

请我需要一个查询,将组具有相同fk_i_item_id作为另一列例子项目

而不是像出现低于这个输出

{"NewsApp":[
{"pk_i_id":"1","fk_i_item_id":"2","s_name":"xDSDki0F
{"pk_i_id":"2","fk_i_item_id":"2","s_name":"GAsk8vqW
{"pk_i_id":"3","fk_i_item_id":"3","s_name":"D033Znu1"},
{"pk_i_id":"4","fk_i_item_id":"3","s_name":"yZSPKeCj"},
{"pk_i_id":"5","fk_i_item_id":"5","s_name":"rc8wCLOQ"},
{"pk_i_id":"6","fk_i_item_id":"5","s_name":"tUWBh6vk"},
{"pk_i_id":"8","fk_i_item_id":"6","s_name":"v3rSPl9s"},
{"pk_i_id":"9","fk_i_item_id":"7","s_name":"8FTuKvgl"},
{"pk_i_id":"10","fk_i_item_id":"7","s_name":"fzb2KzYq"},
{"pk_i_id":"11","fk_i_item_id":"7","s_name":"9Qs7MgUl"},
{"pk_i_id":"12","fk_i_item_id":"8","s_name":"3HmpjxC7"},
{"pk_i_id":"13","fk_i_item_id":"8","s_name":"VF4M6PrE"},
{"pk_i_id":"14","fk_i_item_id":"8","s_name":"tnIH7LqU"},
{"pk_i_id":"15","fk_i_item_id":"8","s_name":"M5jKALrD"},
{"pk_i_id":"16","fk_i_item_id":"9","s_name":"vBBSSfoD"},
{"pk_i_id":"17","fk_i_item_id":"9","s_name":"kUt65zVb"},
{"pk_i_id":"18","fk_i_item_id":"9","s_name":"D5DXAszv"},

它应该出现这样的输出

{"NewsApp":[
{"pk_i_id":"1","fk_i_item_id":"2","s_name":"xDSDki0F","s_name2":"GAsk8vqW"},
{"pk_i_id":"3","fk_i_item_id":"3","s_name":"D033Znu1","s_name2":"yZSPKeCj"},
{"pk_i_id":"5","fk_i_item_id":"5","s_name":"rc8wCLOQ","s_name2":"tUWBh6vk"},
{"pk_i_id":"8","fk_i_item_id":"6","s_name":"v3rSPl9s"},
{"pk_i_id":"9","fk_i_item_id":"7","s_name":"8FTuKvgl","s_name2":"fzb2KzYq","s_name3":"9Qs7MgUl"},
{"pk_i_id":"12","fk_i_item_id":"8","s_name":"3HmpjxC7"},
{"pk_i_id":"13","fk_i_item_id":"8","s_name":"VF4M6PrE","s_name2":"tnIH7LqU","s_name":"M5jKALrD"},
{"pk_i_id":"16","fk_i_item_id":"9","s_name2":"vBBSSfoD"},
{"pk_i_id":"17","fk_i_item_id":"9","s_name":"kUt65zVb","s_name2":"D5DXAszv"},

如果你仔细观察,任何时候都使用相同的ID在一个出合并在一起,

请帮助我。

mysql sql
1个回答
1
投票

我understant的是,当有与同一fk_i_item_id记录,你要保留只有一个,它具有最低pk_i_id

如果你正在使用MySQL 8.0,这是与窗口函数ROW_NUMBER()简单:

SELECT x.pk_i_id, x.fk_i_item_id, x.s_name
FROM (
    SELECT
        r.*, 
        ROW_NUMBER() OVER(PARTITION BY r.fk_i_item_id ORDER BY r.pk_i_id) rn
    FROM resource r
) x WHERE x.rn = 1

内部查询行列fk_i_item_id基团内的每个记录,并且外部查询过滤掉重复。


如果您正在运行MySQL的早期版本,您可以使用与确保没有其他记录具有相同NOT EXIST和较低的fk_i_item_id存在相关子查询一个pk_i_id条件:

SELECT r.pk_i_id, r.fk_i_item_id, r.s_name
FROM resource r
WHERE NOT EXISTS (
    SELECT 1 
    FROM resource r1 
    WHERE r1.fk_i_item_id = r.fk_i_item_id AND r1.pk_i_id < r.pk_i_id
)
© www.soinside.com 2019 - 2024. All rights reserved.