我有以下 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/