2017-04-03 64 views
1

我正在寻找将防水服务添加到服务数据库。我想为每个设备添加一次服务,而不管它是否是店内服务。这是我目前有:SQL - 将行插入到列中具有不同值的同一个表中

INSERT INTO services (serviceID, manufacturer, deviceName, serviceName, price, upc) 
SELECT 
    DEFAULT, 
    manufacturer, 
    DISTINCT deviceName, 
    'Waterproofing Stand-alone', 
    '59.99', 
    '00813583026318' 
FROM services 
WHERE deviceName NOT LIKE '%(In-store)%'; 

请让我知道这是否会产生预期的效果。

谢谢

+2

什么是“期望的效果?”你能通过样品数据告诉我们你试图插入什么吗? –

+0

![Valid XHTML](http://www.giganticsocial.com/db.png)。 – ggntc

+0

见上图。我想为每个具有防水服务的设备添加1行 – ggntc

回答

2

这不是多么独特的作品。 Distinct返回所有选定列的值的唯一组合。

假设serviceId是一个自动递增列,您可以使用聚合,并在其他列上使用max(或min)来获取每个deviceName只有一行。

insert into services (
    manufacturer, 
    deviceName, 
    serviceName, 
    price, 
    upc 
    ) 
select max(manufacturer), 
    deviceName, 
    'Waterproofing Stand-alone', 
    '59.99', 
    '00813583026318' 
from services 
where deviceName not like '%(In-store)%' 
group by deviceName; 

如果每个deviceName只能有一个制造商,那么你不需要一个group by。只是DISTINCT应该没问题:

insert into services (
    manufacturer, 
    deviceName, 
    serviceName, 
    price, 
    upc 
    ) 
select distinct manufacturer, 
    deviceName, 
    'Waterproofing Stand-alone', 
    '59.99', 
    '00813583026318' 
from services 
where deviceName not like '%(In-store)%'; 
+0

这将为每个不同的deviceName添加1个服务? – ggntc

+0

我同意这个家伙。使用分组 - 不明显。 –

+0

@ggntc - 是的,它应该产生一个服务的独特设备。但是,究竟是哪一种 - 不管聚合函数如何产生。如果这不是您想要的,请在您的问题中添加样本数据和预期输出以及解释。 – GurV

相关问题