Mysql 从不同的列表中选择

Mysql 从不同的列表中选择,mysql,Mysql,我正在运行以下查询: SELECT DISTINCT hardware_id, model, make from Table1 order by hardware_id; 我的问题是,在结果集中,我只想看到硬件id多次出现的结果 例如: 硬件1型号1制造1 硬件1型号2制造1 hardware 2 model2 make 1>我不想看到这一点,因为hardware 2只出现1次 硬件3型号2制造1 硬件3型号2制造1 你知道我该怎么做吗 ===== 问题是,由于我的DISTINCT标志,我无法

我正在运行以下查询:

SELECT DISTINCT hardware_id, model, make from Table1 order by hardware_id;
我的问题是,在结果集中,我只想看到硬件id多次出现的结果

例如:

硬件1型号1制造1

硬件1型号2制造1

hardware 2 model2 make 1>我不想看到这一点,因为hardware 2只出现1次

硬件3型号2制造1

硬件3型号2制造1

你知道我该怎么做吗

=====

问题是,由于我的DISTINCT标志,我无法使用以下查询:

选择hardware_id,model,make from Table1,其中hardware_id在SELECT DISTINCT hardware_id,model,make from Table1 order by hardware_id,其中counthardware_id>=2

我绝对需要使用不同的硬件标识、型号和品牌

有什么想法吗?

试试这个查询:

SELECT hardware_id, model, make 
FROM Table1 AS t
WHERE EXISTS
      ( SELECT * 
        FROM Table1 AS td
        WHERE td.hardware_id = t.hardware_id
          AND td.id <> t.id                 --- if id is the PK of the table
      )
ORDER BY hardware_id
SELECT hardware_id, model, make from Table1 where hardware_id in 
    (select hardware_id 
     from TABLE1 group by hardware_id having count(hardware_id) > 1);
另一个版本:

SELECT hardware_id, model, make from Table1 t where EXISTS( 
    select hardware_id 
     from TABLE1 where hardware_id = t.hardware_id 
     group by hardware_id having count(hardware_id) > 1
);
请尝试以下查询:

SELECT hardware_id, model, make from Table1 where hardware_id in 
    (select hardware_id 
     from TABLE1 group by hardware_id having count(hardware_id) > 1);
另一个版本:

SELECT hardware_id, model, make from Table1 t where EXISTS( 
    select hardware_id 
     from TABLE1 where hardware_id = t.hardware_id 
     group by hardware_id having count(hardware_id) > 1
);

您需要子查询重复的硬件ID,并将此列表加入到您的查询中。子查询可以是:

SELECT hardware_id
FROM Table1
GROUP BY hardware_id
HAVING COUNT(hardware_id) > 1
然后,您可以将其加入原始查询:

SELECT hardware_id, model, make 
FROM Table1
INNER JOIN (
    SELECT t1.hardware_id
    FROM Table1 t1
    GROUP BY t1.hardware_id
    HAVING COUNT(t1.hardware_id) > 1
) AS join1 ON (join1.hardware_id = Table1.hardware_id)
ORDER BY hardware_id ASC;

您需要子查询重复的硬件ID,并将此列表加入到您的查询中。子查询可以是:

SELECT hardware_id
FROM Table1
GROUP BY hardware_id
HAVING COUNT(hardware_id) > 1
然后,您可以将其加入原始查询:

SELECT hardware_id, model, make 
FROM Table1
INNER JOIN (
    SELECT t1.hardware_id
    FROM Table1 t1
    GROUP BY t1.hardware_id
    HAVING COUNT(t1.hardware_id) > 1
) AS join1 ON (join1.hardware_id = Table1.hardware_id)
ORDER BY hardware_id ASC;
但是,这将为模型和make选择*随机*值。 您可能需要考虑使用:

SELECT hardware_id, GROUP_CONCAT(DISTINCT CONCAT(model,' - ',make)) AS modelmakes 
FROM table1
GROUP BY hardware_id  --  group by orders the rows ASC as a side effect.
HAVING count(hardware_id) > 1
您还可以对第一个select执行联接,以获得所需的所有行,您不需要distinct

SELECT t1.hardware_id, t1.make, t1.make 
FROM table1 t1
INNER JOIN (
    SELECT hardware_id 
    FROM table1
    GROUP BY hardware_id  
    HAVING count(hardware_id) > 1
           ) t2 ON (t1.hardware_id = t2.hardware_id)
但是,这将为模型和make选择*随机*值。 您可能需要考虑使用:

SELECT hardware_id, GROUP_CONCAT(DISTINCT CONCAT(model,' - ',make)) AS modelmakes 
FROM table1
GROUP BY hardware_id  --  group by orders the rows ASC as a side effect.
HAVING count(hardware_id) > 1
您还可以对第一个select执行联接,以获得所需的所有行,您不需要distinct

SELECT t1.hardware_id, t1.make, t1.make 
FROM table1 t1
INNER JOIN (
    SELECT hardware_id 
    FROM table1
    GROUP BY hardware_id  
    HAVING count(hardware_id) > 1
           ) t2 ON (t1.hardware_id = t2.hardware_id)


表是否有主键?是否有与硬件id、型号和品牌完全相同的行?否,三元组硬件id、型号、品牌必须不同。表是否有主键?是否有与硬件id、型号和品牌完全相同的行?否,三元组硬件id、型号,make必须是独特的。为什么不是一个简单的组。。。有吗?@Johan:分组。。你的意思是拥有和加入。嗨,主键叫做id。诀窍是三元组硬件id,model,make必须是不同的!不,分组,见下面我的答案。是我弄错了,还是我遗漏了什么?@Rgonomike:有没有硬件id、型号和品牌完全相同的行?为什么不简单地分组。。。有吗?@Johan:分组。。你的意思是拥有和加入。嗨,主键叫做id。诀窍是三元组硬件id,model,make必须是不同的!不,分组,见下面我的答案。是我弄错了,还是我遗漏了什么?@Rgonomike:有没有硬件id、型号和品牌完全相同的行?你需要组“CONCATCONCATmodel”-,make来区分表中的行hard1、model1、make1和hard1、model2、make2,从表中的行hard1、model1、make2和hard1、model2、make1我得到这组结果:Mac@E1752、E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,我该如何消除重复项?,make@Rgonomike,我认为在productid中,组合make+模型是独一无二的。无论如何,更新后的代码应该会解决您的问题。@Rgonomike,真正的问题当然是您的数据库没有规范化。您需要组_CONCATCONCATmodel,'-',make来区分行为hard1、model1、make1和hard1、model2、make2的表和行为hard1、model1、make2和hard1、model2的表,这组结果:Mac@E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E1752,E12,E1752,E1752,E1752,E1752,E1752,E12,E1752,E1752,E1752,E1752,E1752,E1E1752,E1752,E1752,E1752华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,华为,我该如何消除重复?,'-',make@Rgonomike,我认为在productid中,组合make+模型将是唯一的。无论如何,更新的代码应该会解决您的问题。@Rgonomike,真正的问题当然是您的数据库没有正常化。