我有2個表,article
和image
。從單個查詢中的2個表中選擇
爲了提取特定用戶的所有文章,我需要:
查詢所有文章
SELECT * FROM article WHERE userid=100;
然後依次通過這些文章,並提取其圖像附:
SELECT * FROM image WHERE articleid = currentArticleId;
如何用單個查詢實現同樣的功能?
我有2個表,article
和image
。從單個查詢中的2個表中選擇
爲了提取特定用戶的所有文章,我需要:
查詢所有文章
SELECT * FROM article WHERE userid=100;
然後依次通過這些文章,並提取其圖像附:
SELECT * FROM image WHERE articleid = currentArticleId;
如何用單個查詢實現同樣的功能?
您可以使用連接或子查詢。
子查詢(包含在方括號中的第二查詢)將被執行並返回的ID(一個或多個)將被用於識別從所述初始查詢行搶哪個。因此,如果您想象子查詢返回(1,2,3),則初始查詢將查找行WHERE articleid
是IN
列表。
SELECT * FROM image WHERE articleid IN (SELECT id FROM article WHERE userid=100);
Join:
在這裏,你告訴MySQL的,在image
的articleid
在article
表是關係到id
列。然後,您可以從任一表中拉列。這是一個淡化的解釋,所以我建議你閱讀鏈接。有各種類型的JOIN
會導致不同的結果,因此您應該閱讀大約LEFT
,RIGHT
,OUTER
和INNER
連接以確保結果集符合您的需求。在這種情況下,JOIN
相當於INNER
連接。
SELECT
image.col1,
image.col2,
image.colX,
article.col1,
article.col2,
article.colX
FROM image
JOIN article ON article.id = image.articleid;
+1這是比我的解決方案更好 – PSR 2014-09-30 11:48:27
感謝您的答案。但是,我仍然遇到一個小問題,結果集與我的示例不匹配。每個圖像行現在包含選定的aticle列。我如何根據每篇文章對這些圖像進行分組? – user3925697 2014-09-30 13:21:59
將'GROUP BY columnName'添加到查詢的末尾:[Reading](http://www.w3schools.com/sql/sql_groupby.asp) – Luke 2014-09-30 13:28:55
SELECT * FROM image WHERE articleid
in(SELECT articleid FROM article WHERE userid=100)
你可以像下面這樣做
SELECT * FROM images WHERE articleid IN (SELECT id FROM article WHERE userid=100;);
希望這會幫助你。
你可以閱讀更多關於選擇語句,連接等。在這裏: MySQL Reference - Select Syntax
SELECT *
FROM image
JOIN article ON article.id = image.articleid;
您可以使用@Doctus的答案,但你的加盟需要採取適當的照顧的表連接
。
就你而言,某些用戶可能沒有圖像。
--//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;
你不「循環」,在SQL中,你加入兩個表在SQL中的 – 2014-09-30 11:47:29
谷歌的子查詢使用加入,您可以搜索在谷歌 – CodingDefined 2014-09-30 11:47:42
'articleid'列 – radar 2014-09-30 11:47:49