SQL 语句(连接)

标签 sql mysql join

我有以下 MySql 表:

--------------------------------------------
Table 'category'
--------------------------------------------
category_id    name        parent_id
1              animal      NULL
2              vegetable   NULL
3              mineral     NULL
4              dog         1
6              cat         1
7              carrot      2
8              quartz      3

下面的 SQL 语句将像这样列出所有结果:


category_id    category    sub_category
4              animal      dog
6              animal      cat
7              vegetable   carrot
8              mineral     quartz

SELECT sub_category.category_id AS category_id,
       category.name AS category,
       sub_category.name AS sub_category
FROM category
LEFT OUTER JOIN category AS sub_category
    ON sub_category.parent_id = category.category_id
WHERE category.parent_id IS NULL
ORDER BY category_id

但现在我有另一个表,其中包含特定用户不感兴趣的类别:

--------------------------------------------
Table 'category_filter'
--------------------------------------------
user_id   category_id
1         4
1         7
1         8

我如何查询某个特定用户,以便获得所有类别的列表以及用户是否感兴趣的信息?

例如:

--------------------------------------------------------------
category_id    category    sub_category    interested
4              animal      dog             NULL
6              animal      cat             6
7              vegetable   carrot          7
8              mineral     quartz          NULL

在此先感谢您的支持。

最佳答案

使用:

   SELECT c.category_id,
          c.name AS category,
          subc.name AS sub_category,
          cf.category_id AS interested
     FROM CATEGORY c
LEFT JOIN CATEGORY subc ON subc.category_id = c.parent_id
                       AND subc.parent_id IS NULL
LEFT JOIN CATEGORY_FILTER cf ON cf.category_id IN (c.category_id, subc.category_id)
                            AND cf.user_id = ?
    WHERE c.parent_id IS NOT NULL

CATEGORY_FILTER 的连接与@djacobson 的回答不同,因为它将表连接到 CATEGORY 表的两个实例。

关于SQL 语句(连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807460/

相关文章:

简单数据库上的 MySQL Join 语句

java - 使用联接表将 JPA 双向 @ManyToOne 关系映射到多个表

sql - Oracle左外连接,只需要空值

mysql join日期记录失败,可见where子句

mysql - SQL - JOIN 和比较不同表中的两行有什么区别?

sql - Oracle:日期至半年

php - 使用php使用jquery和mysql更新表记录

为没有结果而替换为 0 的 SQL 语句

php - Codeigniter 从数据库记录中选择前一天

mysql - 通过 INNER JOIN 和 where 子句更新表