我有2个表,article
和image
。
为了提取特定用户的所有文章,我需要:
查询所有文章
SELECT * FROM article WHERE userid=100;
然后循环浏览这些文章,并使用以下内容提取图像:
SELECT * FROM image WHERE articleid = currentArticleId;
如何通过一个查询实现同样的目标?
答案 0 :(得分:10)
您可以使用联接或子查询。
将执行子查询(括号中包含的第二个查询),并且将返回返回的ID以标识要从中获取的初始查询中的哪些行。因此,如果您想象子查询返回(1,2,3),则初始查询将查找列出的WHERE articleid
行IN
。
SELECT * FROM image WHERE articleid IN (SELECT id FROM article WHERE userid=100);
Join:
在这里,您告诉MySQL articleid
中的image
与id
表中的article
列相关。然后你可以从任一表中拉出列。这是一个淡化的解释,所以我建议你阅读链接。有各种类型的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 :(得分:1)
SELECT * FROM image WHERE articleid
in(SELECT articleid FROM article WHERE userid=100)
答案 2 :(得分:1)
您可以在此处阅读有关select语句,联接等的更多信息: MySQL Reference - Select Syntax
SELECT *
FROM image
JOIN article ON article.id = image.articleid;
答案 3 :(得分:1)
您可以使用@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;
答案 4 :(得分:0)
你可以这样做
SELECT * FROM images WHERE articleid IN (SELECT id FROM article WHERE userid=100; );
希望这会对你有所帮助。