MySQL - 删除find_in_set中没有的地方

时间:2018-02-01 10:48:03

标签: mysql find-in-set

我正在尝试找到正确的语法来删除不在逗号分隔行中的记录。

表格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

但没有任何运气。

我该怎么做?

2 个答案:

答案 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
)
  

演示: http://sqlfiddle.com/#!9/3a3e13/6/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函数。