繁体   English   中英

从下面的SQL查询中删除重复项

[英]Remove duplicates from the below SQL query

SQL表

id       component   price  manufactured
1         fx card   500     2011
2         ram       400     2010
3         case      400     2010
4         smps      500     2011
5         cord      200     2010
6         usb       200     2010

预期产量(以相同价格和制造年份作为不同组合的退货组件):

component   component   price   manufactured
smps        fx card     500     2011
case        ram         400     2010
cord        usb         200     2010

查询已尝试

SELECT m1.[component]
  ,m2.[component]
  ,m1.[price]
  ,m1.[manufactured]
FROM [dbo].[Mfg] m1
inner join [dbo].[Mfg] m2
on m1.component != m2.component 
and m1.price = m2.price 
and m1.manufactured = m2.manufactured

以上查询的结果(尽管输出错误):

component   component   price   manufactured
smps        fx card     500    2011
case        ram         400    2010
cord        usb         200    2010
ram         case        400    2010
fx card     smps        500    2011
usb         cord        200    2010

请帮助我消除使用查询的重复组合。

如果没有成对的组件共享相同的名称,则此方法有效:

SELECT m1.[component]
      ,m2.[component]
      ,m1.[price]
      ,m1.[manufactured]
FROM [dbo].[Mfg] m1
JOIN [dbo].[Mfg] m2 ON m1.component > m2.component 
                   AND m1.price = m2.price 
                   AND m1.manufactured = m2.manufactured;

我所做的只是将不等式运算符!=换成greater than运算符。 这样,您每对都可以得到一次,而不是两次。

为了提供相同名称的可能性:

JOIN [dbo].[Mfg] m2 ON m1.id > m2.id
                   AND m1.price = m2.price 
                   AND m1.manufactured = m2.manufactured;

我认为id是唯一的,所以不会出错。

暂无
暂无

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

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