2017-04-03 26 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が自動インクリメント列であると仮定すると、aggregationを使用して、他の列でmax(またはmin)を使用してdeviceNameごとに1つの行を取得できます。

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ごとにメーカーが1つしかない場合は、でグループ化する必要はありません。 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

これは、それぞれ異なるデバイス名ごとに1つのサービスを追加しますか? – ggntc

+0

私はこの塊茎に同意します。グループを使用する - 別名ではありません。 –

+0

@ggntc - はい、1つのサービスで一意のデバイス名を生成する必要があります。しかし、正確には、集計関数が生成するものは何でも。それがあなたが望むものでないなら、あなたの質問にサンプルデータと予想される結果を説明と共に加えてください。 – GurV

関連する問題