1

私は下のテーブルを持っています、

テーブル製品,

product_id | name 
-----------------------
      1    | product 1 
      2    | Product 2
      3    | Product 3     
      4    | product 4    
      5    | product 5  
      .    | ....
      .    | ....

テーブルproduct_to_zone

product_id | zone_id 
--------------------
     1     | 10 
     1     | 11
     2     | 10    
     2     | 11   

product_to_zoneテーブルに割り当てられていないすべての製品のデフォルトとしてzone_id 10,11を追加する方法はありますか(つまり、 product_id 3,4,5 の場合)

4

6 に答える 6

1

おそらくこのように: -

SELECT a.product_id, a.name, b.zone_id
FROM products a
INNER JOIN product_to_zone b
ON a.product_id = b.product_id
UNION
SELECT a.product_id, a.name, 10
FROM products a
LEFT OUTER JOIN product_to_zone b
ON a.product_id = b.product_id
WHERE b.product_id IS NULL
UNION
SELECT a.product_id, a.name, 11
FROM products a
LEFT OUTER JOIN product_to_zone b
ON a.product_id = b.product_id
WHERE b.product_id IS NULL

割り当てられていないものを追加したいだけの場合は、次のようになります:-

INSERT INTO product_to_zone (product_id, zone_id )
SELECT a.product_id, 10
FROM products a
LEFT OUTER JOIN product_to_zone b
ON a.product_id = b.product_id
WHERE b.product_id IS NULL
UNION
SELECT a.product_id, 11
FROM products a
LEFT OUTER JOIN product_to_zone b
ON a.product_id = b.product_id
WHERE b.product_id IS NULL
于 2013-07-12T08:46:27.250 に答える
0
INSERT INTO product_to_zone (product_id, zone_id)
SELECT * FROM (SELECT (product_id, '10') FROM product WHERE product_id NOT IN
(SELECT a.product_id from product a JOIN product_to_zone b GROUP BY a.product_id)
 UNION
 SELECT (product_id, '11') FROM product WHERE product_id NOT IN
(SELECT a.product_id from product a JOIN product_to_zone b GROUP BY a.product_id));

これにより、まだ product_to_zone にないすべての製品が取得され、zone_id 10 と 11 で product_to_zone に挿入されます。

編集:将来の製品でこれを自動的に実行したい場合は、トリガーを作成してください。

CREATE TRIGGER tr_product_to_zone AFTER INSERT ON product
FOR EACH ROW BEGIN
    INSERT INTO product_to_zone (product_id, zone_id)
    VALUES (NEW.product_id, '10');
    INSERT INTO product_to_zone (product_id, zone_id)
    VALUES (NEW.product_id, '11');
END;
于 2013-07-12T08:46:27.950 に答える
-2

次の 2 つの方法でそれを行うことができます。

  • product_to_zone の両方の列に一意のインデックスがある場合

IGNORE を product_to_zone に挿入します (製品から product_id、11 を選択)。

IGNORE を product_to_zone に INSERT (product_id、product から 10 を選択);

  • そうでない場合は、上記の人々からのヒントを使用できます
于 2013-07-12T08:51:04.793 に答える