2017-04-03 56 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

相關問題