我有一个帖子表和一个类别表,我想要的是选择特定类别的帖子。问题是类别存储在另一个表而不是posts表中,这是示例:
id title body
---------------------------
125 Some title Blah blah
postid category
----------------
125 politic
我希望在单个查询中通过示例获取政治类别中的帖子,该怎么办?
答案 0 :(得分:4)
使用:
SELECT p.id,
p.title,
p.body
FROM POSTS p
JOIN CATEGORIES c ON c.postid = p.id
WHERE c.category = 'politic'
我对CATEGORIES表的问题是将类别值存储为字符串表示数据未规范化 - 您应该使用CATEGORY表:
...并使用category_id
表中的CATEGORIES
值:
答案 1 :(得分:1)
select p.*
from posts p
inner join categories c
on p.id = c.postid
where
c.category = 'politic'
答案 2 :(得分:0)
您需要加入查询中的两个表
SELECT *
FROM posts P
INNER JOIN categories C on C.post_id = P.id
WHERE C.category = 'politic'
您可以直观地(这不是技术上正确的解释)将此联接视为将类别字段附加到具有共享ID的帖子中的行(这是'on C.post_id = P.id')。 WHERE子句表示您只需要那些类别为“politic”的行。
内部联接是多种联接类型之一。左连接特别是另一个常见的连接,它在这种情况下的不同之处在于仍然会列出没有类别匹配的帖子行,但是对于类别中的字段,则为空。 (使用内连接这样的行不会保留)