我正在尝试找到正确的语法来删除不在逗号分隔行中的记录。
表格A
tab event
表B
| id | product_id | attribute_id |
|----|------------|--------------|
| 1 | 123 | 45 |
| 2 | 123 | 46 |
| 3 | 124 | 34 |
| 4 | 124 | 33 |
我的目标是从表A中删除属性id不在表B轴值中的所有行(在本例中为id = 4的行)。
我之前尝试| code | Axis |
|------|-------|
| 123 | 45,46 |
| 124 | 34 |
:
SELECT
但没有任何运气。
我该怎么做?
答案 0 :(得分:1)
您可以尝试以下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
表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
)
答案 1 :(得分: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
函数。