MySQL - 删除不在 find_in_set 中的地方
MySQL - delete where not in find_in_set
我正在寻找正确的语法来删除不在逗号分隔行中的记录。
table一个
| id | product_id | attribute_id |
|----|------------|--------------|
| 1 | 123 | 45 |
| 2 | 123 | 46 |
| 3 | 124 | 34 |
| 4 | 124 | 33 |
table B
| code | Axis |
|------|-------|
| 123 | 45,46 |
| 124 | 34 |
我的目标是从 table A 中删除属性 ID 不在 table B 轴值中的所有行(在此示例中,id = 4 的行)。
我尝试做一个 SELECT
之前:
SELECT A.attribute_id, A.product_id
FROM tableA as A
LEFT JOIN (SELECT * FROM tableB) AS B
ON FIND_IN_SET(A.attribute_id, B.`axis`)
但是没有运气。
我该怎么做?
您可以尝试以下方法 SELECT
数据:
SELECT A.attribute_id, A.product_id
FROM tableA AS A LEFT JOIN tableB AS B ON A.product_id = B.code
WHERE IFNULL(FIND_IN_SET(A.attribute_id, B.Axis), 0) = 0
您可以使用以下命令 DELETE
table A 上的行(基于 SELECT
):
DELETE FROM tableA WHERE id IN (
SELECT A.id
FROM tableA AS A LEFT JOIN tableB AS B ON A.product_id = B.code
WHERE IFNULL(FIND_IN_SET(A.attribute_id, B.Axis), 0) = 0
)
这个怎么样:
DELETE FROM tableA WHERE id IN
(
SELECT A.id
FROM tableA AS A
LEFT JOIN tableB AS B
ON A.product_id = B.code AND FIND_IN_SET(CONCAT(A.attribute_id), B.Axis) = 0;
)
如果您的 attribute_id
字段是 char 或 varchar,请忽略 CONCAT
函数。
我正在寻找正确的语法来删除不在逗号分隔行中的记录。
table一个
| id | product_id | attribute_id |
|----|------------|--------------|
| 1 | 123 | 45 |
| 2 | 123 | 46 |
| 3 | 124 | 34 |
| 4 | 124 | 33 |
table B
| code | Axis |
|------|-------|
| 123 | 45,46 |
| 124 | 34 |
我的目标是从 table A 中删除属性 ID 不在 table B 轴值中的所有行(在此示例中,id = 4 的行)。
我尝试做一个 SELECT
之前:
SELECT A.attribute_id, A.product_id
FROM tableA as A
LEFT JOIN (SELECT * FROM tableB) AS B
ON FIND_IN_SET(A.attribute_id, B.`axis`)
但是没有运气。
我该怎么做?
您可以尝试以下方法 SELECT
数据:
SELECT A.attribute_id, A.product_id
FROM tableA AS A LEFT JOIN tableB AS B ON A.product_id = B.code
WHERE IFNULL(FIND_IN_SET(A.attribute_id, B.Axis), 0) = 0
您可以使用以下命令 DELETE
table A 上的行(基于 SELECT
):
DELETE FROM tableA WHERE id IN (
SELECT A.id
FROM tableA AS A LEFT JOIN tableB AS B ON A.product_id = B.code
WHERE IFNULL(FIND_IN_SET(A.attribute_id, B.Axis), 0) = 0
)
这个怎么样:
DELETE FROM tableA WHERE id IN
(
SELECT A.id
FROM tableA AS A
LEFT JOIN tableB AS B
ON A.product_id = B.code AND FIND_IN_SET(CONCAT(A.attribute_id), B.Axis) = 0;
)
如果您的 attribute_id
字段是 char 或 varchar,请忽略 CONCAT
函数。