簡體   English   中英

如何在單個查詢中查詢3個表?

[英]How to query 3 tables in a single query?

對於第一篇文章,我真的很抱歉,因為我沒有解釋所有事情。

基本上我有3個表,一個表用於帖子,一個表用於類別,另一個用於將類別與帖子鏈接。

我希望在一個MySQL查詢中選擇特定類別下的帖子。

posts(id,title,body)
---------------------
125,Some title,Blah blah


categories(id,name)
---------------------
1,politic
2,entertainment

linker(categoryid,postid)
---------------------
2,125

我想在單個查詢中以示例方式獲取娛樂類別中的帖子,怎么辦?

謝謝

select 
     p.*
from 
     posts p
     inner join linker l on l.postid = p.id
     inner join categories c on c.categoryid = l.categoryid
where 
     c.name = 'entertainment'

這是完全相同的事情,您只需要將intead中的3個表聯接在一起:

SELECT P.id post_id,
       P.title,
       P.body,
       C.id category_id,
       C.name
FROM posts P
INNER JOIN linker L
    ON P.id = L.postid
INNER JOIN categories C
    ON L.categoryid = C.id
WHERE C.name = 'Category'

不要害怕做自己的測試。 如果您了解如何聯接兩個表,則應了解如何聯接三個,四個及更多。

以下SQL語句應為您嘗試做的事情提供基礎。

select p.*
from posts p
inner join linker l
on l.postid = p.id
inner join categories c
on l.categoryid = c.id
where c.name = 'entertainment'

如果帖子屬於2個類別,您仍然可以在select語句中使用帶DISTINCT的pinkfloydx33的查詢:

select 
     DISTINCT p.*
from 
     posts p
     inner join linker l on l.postid = p.id
     inner join categories c on c.categoryid = l.categoryid
where 
     c.name = 'entertainment'

結果集將僅顯示一條記錄。

如果僅在WHERE子句中指定一個類別,則結果將是每個帖子ID的一行。

無論哪種方式,當每個ID的結果可能超過一行時,都可以使用DISTINCT或GROUP BY,但是在那種情況下,我更喜歡第二行(GROUP BY)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM