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