【问题标题】:find rows with column C not in list of values of another table查找列 C 不在另一个表的值列表中的行
【发布时间】:2022-07-30 21:27:57
【问题描述】:

表“A”:

id name category_id
1 foo cat1
2 bar cat2
3 foob cat1
4 booh cat999

表“B”:

id categories
1 cat1, cat3
2 cat2, cat1, cat3
3 cat1

我想用A.category_id NOT IN B.categories 查找表“A”的行。如您所见,问题是“B.categories”是逗号分隔值,我不知道在这种情况下如何使用“LIKE”。

在我的示例中,我必须能够找到表“A”的第 4 行。

【问题讨论】:

  • 我知道标题不太清楚,但我没有找到更好的...对不起:(
  • 请阅读stackoverflow.com/questions/3653462/…,对于 where 子句,您可以使用 FIND_IN_SET
  • 我强烈建议您至少将数据库设计规范化为 1NF。

标签: mysql sql


【解决方案1】:

您可以尝试将NOT EXISTSFIND_IN_SET 一起使用

SELECT a.*
FROM A a 
WHERE NOT EXISTS (
  SELECT 1
  FROM B b
  WHERE FIND_IN_SET(a.category_id, b.categories)
)

sqlfiddle

【讨论】:

    【解决方案2】:

    您可以使用 LEFT JOIN 选择 NULL 值:

    SELECT
        A.category_id
    FROM 
        A
    LEFT JOIN
        B
    ON
        FIND_IN_SET(A.category_id, B.categories)
    WHERE
        B.categories IS NULL
    

    【讨论】:

    • 这也有效:)
    猜你喜欢
    • 2014-12-21
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 2020-08-07
    相关资源
    最近更新 更多