mysql - 更新 MySQL 查询,选择具有特定非唯一值的记录

标签 mysql sql

我正在寻求创建 MySQL 查询的帮助。我有以下数据库表:

+----------------+-----------+-------------+------------+-------------------+---------+-------------+---------------+--------+
| option_type_id | option_id | sku         | sort_order | customoptions_qty | default | in_group_id | dependent_ids | weight |
+----------------+-----------+-------------+------------+-------------------+---------+-------------+---------------+--------+
|            552 |       137 | 13071727    |       1000 | 0                 |       0 |           0 |               | 0.0000 |
|            553 |       137 | 13071727B   |       1000 | 0                 |       0 |           1 |               | 0.0000 |
|            554 |       137 | 13071727C   |       1000 | 1                 |       0 |           2 |               | 0.0000 |
|            555 |       137 | 13071727D   |       1000 | 1                 |       0 |           3 |               | 0.0000 |
|            556 |       138 | 13085350-1  |       1000 | 0                 |       0 |           0 |               | 0.0000 |
|            557 |       138 | 13085350-1D |       1000 | 2                 |       0 |           1 |               | 0.0000 |
|            558 |       138 | 13085350-1C |       1000 | 3                 |       0 |           2 |               | 0.0000 |
|            559 |       138 | 13085350-1B |       1000 | 2                 |       0 |           3 |               | 0.0000 |
|            560 |       139 | 13069547M   |       1000 | 20                |       0 |           0 |               | 0.0000 |
|            561 |       140 | 13084477-2  |        950 | 2                 |       0 |           0 |               | 0.0000 |
|            562 |       140 | 13084477-2B |        951 | 2                 |       0 |           1 |               | 0.0000 |
|            563 |       140 | 13084477-2C |        952 | 3                 |       0 |           2 |               | 0.0000 |
|            564 |       140 | 13084477-2D |        953 | 0                 |       0 |           3 |               | 0.0000 |
|            565 |       140 | 13084477-2E |        954 | 2                 |       0 |           4 |               | 0.0000 |
|            566 |       141 | 13066533-1  |       1000 | 4                 |       0 |           0 |               | 0.0000 |
|            567 |       141 | 13066533-1B |       1000 | 5                 |       0 |           1 |               | 0.0000 |
|            568 |       141 | 13066533-1C |       1000 | 5                 |       0 |           2 |               | 0.0000 |
|            569 |       141 | 13066533-1D |       1000 | 0                 |       0 |           3 |               | 0.0000 |
|            570 |       142 | 13071674    |       1000 | 0                 |       0 |           0 |               | 0.0000 |
|            571 |       142 | 13071674D   |       1000 | 1                 |       0 |           1 |               | 0.0000 |
|            572 |       142 | 13071674C   |       1000 | 2                 |       0 |           2 |               | 0.0000 |
|            573 |       142 | 13071674B   |       1000 | 0                 |       0 |           3 |               | 0.0000 |
|            574 |       142 | 13071674E   |       1000 | 4                 |       0 |           4 |               | 0.0000 |
|            575 |       143 | 13071667    |       1000 | 0                 |       0 |           0 |               | 0.0000 |
|            576 |       143 | 13071667B   |       1000 | 0                 |       0 |           1 |               | 0.0000 |
|            577 |       143 | 13071667C   |       1000 | 0                 |       0 |           2 |               | 0.0000 |
|            578 |       143 | 13071667D   |       1000 | 0                 |       0 |           3 |               | 0.0000 |
|            579 |       143 | 13071667E   |       1000 | 0                 |       0 |           4 |               | 0.0000 |
|            580 |       144 | 13066295    |       1000 | 1                 |       0 |           0 |               | 0.0000 |
+----------------+-----------+-------------+------------+-------------------+---------+-------------+---------------+--------+

我想要做的是更新所有in_group_id = 0的行,以在行的末尾添加一个A sku。不过,我只想对没有具有唯一 option_id 值的行执行此操作。

例如,您可以看到 option_id = 139 的行是具有此 option_id 值的唯一行,因此我会希望排除此行的更新。

基本上,这是一个产品选项列表,某些产品有多个选项,每个选项都有自己的 SKU。但是,对于这些具有多个选项的产品,第一个选项的 SKU 末尾缺少“A”,我想添加它。但我不想为只有 1 个选项的产品添加“A”。我希望这是有道理的。

如果有人可以就可以实现这一目标的 MySQL 语句提出建议,那就太好了!

最佳答案

此查询将执行您想要的操作:

UPDATE Table1
LEFT OUTER JOIN (SELECT *
           FROM Table1
        GROUP BY option_id
        HAVING count(*) = 1) t1 ON t1.option_type_id = Table1.option_type_id
SET table1.sku = concat(table1.sku,'A')
WHERE table1.in_group_id = 0 AND t1.option_type_id is null

请参阅 SQL FIDDLE:http://www.sqlfiddle.com/#!2/9d08e/1/0

关于mysql - 更新 MySQL 查询,选择具有特定非唯一值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18496026/

相关文章:

mysql - 将相同的sql结果绑定(bind)为一个字符串

mysql - 如何使同一个表但不同列的值共享行?

php - 如何在一个 PHP 查询中使用 2 个 MySQL SELECT 语句

sql - 禁止 MySQL 对查询使用全表扫描

mysql - 如何从共享相关信息的两个表中删除记录?

mysql - 如果 current_user 将帖子标记为 'hidden',则独立隐藏帖子

mysql - 对唯一字段对求和的 SQL 语句

mysql - SELECT * 在联接内

sql - 我们可以在同一模式中创建具有相同名称的同义词吗

MySQL 在 CASE 语句中从 SUM 中减去