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,真正的问题当然是您的数据库没有正常化。