MySQL 当 LEFT JOIN table 每行包含多个匹配项时更新 Table 1
MySQL Update Table 1 when LEFT JOIN table contains multiple matches per row
我有两个 table 连接在一个命令列上。我需要更新 table 1,其中 table 2 中的项目有多个匹配项。
Table 1 items
:
+-------------------+------------------+------+-----+---------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------------------+-------------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
| vendors_id | tinyint unsigned | NO | MUL | NULL | |
| multiple_vendors | tinyint unsigned | NO | MUL | NULL | |
+-------------------+------------------+------+-----+---------------------+-------------------+
Table 2 item_details
:
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+-------------------+-------------------+
| itmes_id | int unsigned | NO | PRI | NULL | |
| vendors_id | tinyint unsigned | NO | PRI | NULL | |
| location | varchar(255) | YES | MUL | NULL | |
| color | varchar(255) | YES | MUL | NULL | |
| description_short | varchar(255) | YES | MUL | NULL | |
| description_long | text | YES | | NULL | |
+-------------------+------------------+------+-----+-------------------+-------------------+
items
table 和 item_details
table 由 item_details.items_id = items.id.
加入
item_details
中的单个项目可能有多个来自不同供应商的整体。如果我有来自多个供应商的商品,我想更新 items.multiple_vendors = 1
。我正在尝试弄清楚如何 运行 items
上的更新以检查是否 count(item_details.vendors_id > 1
.
我正在尝试使用以下查询,但出现错误 ERROR 1111 (HY000): Invalid use of group function
update items i left join item_details id on id.items_id = i.id set i.multiple_vendors = 1 where count(distinct(id.vendors_id)) > 1 ;
在此先感谢您的帮助~
您不能在 WHERE
中使用聚合函数,因为在您 select 行之后才会发生聚合。
加入一个只有 returns 具有多个匹配项的行的子查询。
UPDATE items AS i
JOIN (
SELECT items_id
FROM item_details
GROUP BY items_id
HAVING COUNT(DISTINCT vendors_id) > 1
) AS id ON id.items_id = i.id
SET i.multiple_vendors = 1
我有两个 table 连接在一个命令列上。我需要更新 table 1,其中 table 2 中的项目有多个匹配项。
Table 1 items
:
+-------------------+------------------+------+-----+---------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+---------------------+-------------------+
| id | int unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
| vendors_id | tinyint unsigned | NO | MUL | NULL | |
| multiple_vendors | tinyint unsigned | NO | MUL | NULL | |
+-------------------+------------------+------+-----+---------------------+-------------------+
Table 2 item_details
:
| Field | Type | Null | Key | Default | Extra |
+-------------------+------------------+------+-----+-------------------+-------------------+
| itmes_id | int unsigned | NO | PRI | NULL | |
| vendors_id | tinyint unsigned | NO | PRI | NULL | |
| location | varchar(255) | YES | MUL | NULL | |
| color | varchar(255) | YES | MUL | NULL | |
| description_short | varchar(255) | YES | MUL | NULL | |
| description_long | text | YES | | NULL | |
+-------------------+------------------+------+-----+-------------------+-------------------+
items
table 和 item_details
table 由 item_details.items_id = items.id.
item_details
中的单个项目可能有多个来自不同供应商的整体。如果我有来自多个供应商的商品,我想更新 items.multiple_vendors = 1
。我正在尝试弄清楚如何 运行 items
上的更新以检查是否 count(item_details.vendors_id > 1
.
我正在尝试使用以下查询,但出现错误 ERROR 1111 (HY000): Invalid use of group function
update items i left join item_details id on id.items_id = i.id set i.multiple_vendors = 1 where count(distinct(id.vendors_id)) > 1 ;
在此先感谢您的帮助~
您不能在 WHERE
中使用聚合函数,因为在您 select 行之后才会发生聚合。
加入一个只有 returns 具有多个匹配项的行的子查询。
UPDATE items AS i
JOIN (
SELECT items_id
FROM item_details
GROUP BY items_id
HAVING COUNT(DISTINCT vendors_id) > 1
) AS id ON id.items_id = i.id
SET i.multiple_vendors = 1