2014-09-30 80 views
1

我有2個表,articleimage從單個查詢中的2個表中選擇

爲了提取特定用戶的所有文章,我需要:

  • 查詢所有文章

    SELECT * FROM article WHERE userid=100;

  • 然後依次通過這些文章,並提取其圖像附:

    SELECT * FROM image WHERE articleid = currentArticleId;

如何用單個查詢實現同樣的功能?

+2

你不「循環」,在SQL中,你加入兩個表在SQL中的 – 2014-09-30 11:47:29

+0

谷歌的子查詢使用加入,您可以搜索在谷歌 – CodingDefined 2014-09-30 11:47:42

+0

'articleid'列 – radar 2014-09-30 11:47:49

回答

8

您可以使用連接或子查詢。


Subquery:

子查詢(包含在方括號中的第二查詢)將被執行並返回的ID(一個或多個)將被用於識別從所述初始查詢行搶哪個。因此,如果您想象子查詢返回(1,2,3),則初始查詢將查找行WHERE articleidIN列表。

SELECT * FROM image WHERE articleid IN (SELECT id FROM article WHERE userid=100); 

Join

在這裏,你告訴MySQL的,在imagearticleidarticle表是關係到id列。然後,您可以從任一表中拉列。這是一個淡化的解釋,所以我建議你閱讀鏈接。有各種類型的JOIN會導致不同的結果,因此您應該閱讀大約LEFTRIGHTOUTERINNER連接以確保結果集符合您的需求。在這種情況下,JOIN相當於INNER連接。

SELECT 
    image.col1, 
    image.col2, 
    image.colX, 
    article.col1, 
    article.col2, 
    article.colX 
FROM image 
JOIN article ON article.id = image.articleid; 
+0

+1這是比我的解決方案更好 – PSR 2014-09-30 11:48:27

+0

感謝您的答案。但是,我仍然遇到一個小問題,結果集與我的示例不匹配。每個圖像行現在包含選定的aticle列。我如何根據每篇文章對這些圖像進行分組? – user3925697 2014-09-30 13:21:59

+0

將'GROUP BY columnName'添加到查詢的末尾:[Reading](http://www.w3schools.com/sql/sql_groupby.asp) – Luke 2014-09-30 13:28:55

1
SELECT * FROM image WHERE articleid 
in(SELECT articleid FROM article WHERE userid=100) 
0

你可以像下面這樣做

SELECT * FROM images WHERE articleid IN (SELECT id FROM article WHERE userid=100;); 

希望這會幫助你。

1

您可以使用@Doctus的答案,但你的加盟需要採取適當的照顧的表連接

  1. 內部連接時(默認加入):當coresponding記錄 同時存在於表中參與
  2. 外連接(可以是 左,右,或FULL):當一個或兩個表不具有一定的 匹配的記錄

就你而言,某些用戶可能沒有圖像。

--//This will also get the articles without any images 
SELECT article.* , image.* 
FROM article 
LEFT OUTER JOIN image 
ON article.articleid = image.articleid 
WHERE userid=100; 
相關問題