1

私は次のデータを持っています

 id |   bill_of_lading |  shipping_rate | 
____|__________________|________________|
   1|              8012|              90|
   2|              6045|              90|
   3|              6045|               0|
   4|              2423|               0|
   5|              5342|              90|
   6|              5643|              90|
   7|              5643|               0|
   8|              7545|               0|
   9|              9034|               0|

bill_of_lading 番号が 1 回だけ出現する行を返し、その結果を使用して、配送料がゼロのレコードの shipping_rate を更新したいと考えています。

たとえば、ID {4、8、9} では配送料を 220 に設定し、ID {3、7} では設定しないようにします。

このようなシナリオで使用する構文が完全にわかりません。

4

3 に答える 3

3
SELECT bill_of_lading, COUNT(*)
FROM t
GROUP BY bill_of_lading
HAVING COUNT(*) = 1

実際に見てみましょう: http://sqlfiddle.com/#!2/842d0/2

対応する行を更新するために結果を使用するには、単純に結合します。

UPDATE t
JOIN (
    SELECT bill_of_lading, COUNT(*)
    FROM t
    GROUP BY bill_of_lading
    HAVING COUNT(*) = 1
) AS selection USING (bill_of_lading)
SET shipping_rate = 220

実際の動作を確認してください: http://sqlfiddle.com/#!2/87b61/1

于 2013-01-04T06:09:41.397 に答える
1

これを試して:

UPDATE tablename 
SET shipping_rate = 220 
WHERE shipping_rate = 0 AND 
      id IN (SELECT id FROM (SELECT id FROM tablename 
             GROUP BY bill_of_lading HAVING COUNT(id) = 1) as A)
于 2013-01-04T06:12:45.763 に答える
0

サイズを試してみてください。他の誰かがもう少しエレガントなものを持っているかもしれません

SELECT *, COUNT(*) AS total FROM table_name GROUP BY bill_of_lading HAVING total = 1
于 2013-01-04T06:09:02.540 に答える