繁体   English   中英

SQL MYSQL选择记录,不包括存在任何重复项的行

[英]SQL MYSQL Select records excluding rows where any duplicates exist

我有以下数据

 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|

我想返回仅出现1次bill_of_lading数字的行,并使用结果更新运费率为零的记录中的shipping_rate。

例如,我想在ids {4,8,9}上将运费设置为220,但不在ids {3,7}上设置

我完全不确定要用于这样的场景的语法。

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

尝试这个:

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)

尝试这个尺寸,其他人可能会有更优雅的东西

SELECT *, COUNT(*) AS total FROM table_name GROUP BY bill_of_lading HAVING total = 1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM