我有一张图片表:pictures(articleid,pictureurl)
文章表:articles(id,title,category)
因此,简而言之,每篇文章都有一张图片,我使用articleid
列将图片与文章相关联。现在我想在politic
类别中选择5张文章图片。
我认为可以使用IN完成,但我无法弄清楚如何做到这一点。
注意:请只有一个查询,因为我可以先选择文章,然后再拍照。
由于
答案 0 :(得分:2)
要从类别中的文章中获取五张图片,您可以这样做:
SELECT pictures.pictureurl
FROM articles, pictures
WHERE articles.id = pictures.articleid AND articles.category = 'politic'
ORDER BY [your sort criteria]
LIMIT 5;
您可以考虑稍微改写一下这个问题。
答案 1 :(得分:1)
如果您正在寻找IN
查询而不是JOIN
,这是Alex查询的替代方案:
SELECT pictureurl
FROM pictures
WHERE arcticleid IN (SELECT id FROM articles WHERE category='politic')
LIMIT 5
答案 2 :(得分:1)
重写以澄清(见评论):
如果您希望将JOIN标准与SELECT标准分开,可以编写如下内容:
SELECT pictureurl
FROM pictures
JOIN articles ON id = articleid
WHERE category LIKE 'politics'
ORDER BY RAND()
LIMIT 5
我发现它的意图稍微清楚一点,就像那样,也许只是我,但我遇到了以SELECT * FROM a, b, c
形式编写的复杂查询,它在MySQL 4下工作,阻塞MySQL 5,而上述格式两者都可以。
此外,如果您使用统一ID列名称进行一致性,并且为了避免在更复杂的场景中混淆,您可以使用USING
子句。因此,如果文章ID列也被命名为articlesid,则JOIN可以这样写:
SELECT pictureurl
FROM pictures
JOIN articles USING (articleid)
...
答案 3 :(得分:0)
您实际上不需要使用IN
。当您嵌套查询或有一组已知值要检查时,IN
会起作用。
在politics
类别中选择5张随机图片:
SELECT pictureurl FROM articles, pictures WHERE pictures.articleid = articles.id AND articles.category = 'politics' ORDER BY RAND() LIMIT 5