繁体   English   中英

如何从union all join查询中删除重复项

How can I remove duplicates from a union all join query

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一张桌子,里面有这些零件号码的零件号和价格。 这是我的主表,大约有100000个条目。 我还有3个表可能的供应商。 并非主表的所有部件都在所有3个供应商表中,并且3个供应商表也具有不同的内容。

我想要的是在3个表中查询主表的partnumbers。 如果在多于1个表中找到partnumber,则它应该只返回最低价格。 如果仅在1个表中找到它,则返回该部分的价格。

我现在正在做的是以下查询:

SELECT `table1.partnumber`,
    `table1`.`price`,
    `maintable`.`price`
FROM `table1`
    INNER JOIN `maintable`
        ON `table1`.`partnumber` = `maintable`.`partnumber`
UNION ALL
SELECT `table2`.`partnumber`,
    `table2`.`price`,
    `maintable`.`price`
FROM `table2`
    INNER JOIN `maintable`
        ON `table2`.`partnumber` = `maintable`.`partnumber`
UNION ALL
SELECT `table3.partnumber`,
    `table3`.`price`,
    `maintable`.`price`
FROM `table3`
    INNER JOIN `maintable`
        ON `table3`.`partnumber` = `maintable`.`partnumber`

这给了我所需的所有数据,之后我检查了最低价格,并使用foreach php代码删除了更高价格的partnumbers。 这对大型数据集来说非常慢。

我确信有一种方法只能获得价格最低的partnumber,如果该partnumber存在于多个表中,并且只返回价格,如果它只存在于1个表中。 我只是不知道如何查询mysql数据库。 我尝试过使用连接,联合,min和distinct的组合,但无济于事。

有人可以帮我吗?

下面eggyal的回答让我顺道而上。 我现在有以下查询对我有用:

SELECT `partnumber`,MIN(`price`) as `price`
FROM (
    SELECT `table1`.`partnumber`,
        `table1`.`price`,
        `maintable`.`price`
    FROM `table1`
        INNER JOIN `maintable`
        ON `table1`.`partnumber` = `maintable`.`partnumber`
    UNION ALL
    SELECT `table2`.`partnumber`,
        `table2`.`price`,
        `maintable`.`price`
    FROM `table2`
        INNER JOIN `maintable`
        ON `table2`.`partnumber` = `maintable`.`partnumber`
    UNION ALL
    SELECT `table3.partnumber`,
        `table3`.`price`,
        `maintable`.`price`
    FROM `table3`
        INNER JOIN `maintable`
        ON `table3`.`partnumber` = `maintable`.`partnumber`
) AS `part` GROUP BY `partnumber`

也许有更好的方法,在这种情况下,我都是耳朵。 但是知道我对上述情况感到满意。

1 个回复
SELECT partnumber, MIN(price) FROM (
  SELECT 1 AS tn, partnumber, table1.price
  FROM   table1 JOIN maintable USING (partnumber)
UNION ALL
  SELECT 2 AS tn, partnumber, table2.price
  FROM   table2 JOIN maintable USING (partnumber)
UNION ALL
  SELECT 3 AS tn, partnumber, table3.price
  FROM   table3 JOIN maintable USING (partnumber)
) t
GROUP BY partnumber
HAVING COUNT(DISTINCT tn) >= 2
1 如何从UNION查询中“删除重复项”

我在MySQL中有两个表:一个叫gtfsws_users ,它包含我正在开发的系统的用户,另一个叫gtfsws_repository_users ,它包含这些用户的角色。 gtfsws_users具有以下字段: 电子邮件 , 密码 , 名称 , is_admin和enabled 。 gt ...

2015-04-26 09:10:28 1 1022   mysql
3 查询联合删除重复项

我有一个联合查询,如下所示。 当在标题和说明之间都找到searh查询时,它将返回重复的记录。 如何避免搜索结果重复记录 搜索 ...

4 如何从PHP中删除数组中的所有重复项?

首先,我想指出所有你复制的问题猎人, 这个问题并没有完全回答我的问题。 现在,我有一个阵列。 我们会说数组是array(1, 2, 2, 3, 4, 3, 2) 我需要删除重复项。 不只是其中一个重复,而是全部 ,所以结果将是array(1, 4) 我查看了array_un ...

6 如何删除查询中的重复项?

我正在尝试删除重复项,因为我想在“ EnterpriseId”列中仅显示一个名称,并在其中使用最大值(在本例中为1300)。 因此,基本上,如果我对globalofferingleadnm和managernm具有相同的名称,那么我只想为globalofferingleadnm删除Manager ...

7 从LEFT JOIN查询中删除重复项

我使用以下JOIN语句: 检索存储在(notes2014)中的每个学生的学生列表(students2014)和相应的注释。 每个学生在notes2014表中都有多个注释,每个注释都有一个与每个学生的唯一ID相对应的ID。 上述声明返回了学生列表,但复制了每个有多个笔记的学生。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM