我有一个图片表:pictures(articleid,pictureurl)
使用IN的Mysql语法帮助!
而一个文章表:articles(id,title,category)
所以,简单地说,每一篇文章都有一个画面,我用articleid
列文章链接的图片。现在我想选择politic
类别中的5篇文章。
我认为可以使用IN完成,但我不知道如何去做。
注意:请只有一个查询,因为我可以通过首先选择文章然后获取图片。
感谢
我有一个图片表:pictures(articleid,pictureurl)
使用IN的Mysql语法帮助!
而一个文章表:articles(id,title,category)
所以,简单地说,每一篇文章都有一个画面,我用articleid
列文章链接的图片。现在我想选择politic
类别中的5篇文章。
我认为可以使用IN完成,但我不知道如何去做。
注意:请只有一个查询,因为我可以通过首先选择文章然后获取图片。
感谢
如果你正在寻找一个IN
查询,而不是一个JOIN
这是亚历克斯的查询替代:
SELECT pictureurl
FROM pictures
WHERE arcticleid IN (SELECT id FROM articles WHERE category='politic')
LIMIT 5
要想从文章五张图片在一个类别,你可以这样做:
SELECT pictures.pictureurl
FROM articles, pictures
WHERE articles.id = pictures.articleid AND articles.category = 'politic'
ORDER BY [your sort criteria]
LIMIT 5;
你可以考虑改写这个问题有点。
你并不真的需要使用IN
这一点。 IN
用于嵌套查询或当您有一组已知的值进行检查时。
要选择politics
5类随机图像:
SELECT pictureurl FROM articles, pictures WHERE pictures.articleid = articles.id AND articles.category = 'politics' ORDER BY RAND() LIMIT 5
改写澄清(见注释):
如果你想保持你的加入,从你选择的标准分离的标准,你可以写像下面:
SELECT pictureurl
FROM pictures
JOIN articles ON id = articleid
WHERE category LIKE 'politics'
ORDER BY RAND()
LIMIT 5
我找到的意图时,它写的稍微清楚,也许这只是我,但我遇到了在MySQL 4下工作的SELECT * FROM a, b, c
表单中写入的复杂查询,这些查询会扼杀MySQL 5,而上述格式与两者都可以正常工作。另外,如果您使用统一的ID列名进行符合性检查,并且为了避免在更复杂的情况下让自己感到困惑,则可以使用USING
子句代替。所以,如果文章ID列又称articlesid,可以将连接写成像这样:
SELECT pictureurl
FROM pictures
JOIN articles USING (articleid)
...
'USING'子句在两个表中都需要相同的列名;不幸的是,在这个例子中,它们是不同的。因此,您必须改用ON子句。 – 2010-03-21 23:12:28
@Jonathan Leffler:这就是为什么我开始我的答案,说使用统一的列名将允许你这样做:) – Duncan 2010-03-22 00:04:38
好的:是的,信息在那里,虽然它不是直接回答问题,而是答案到一个稍微不同的问题。我认为阅读SQL比评论更难。你可以避免这个问题 - 只要它是一个问题 - 通过给出ON表示法然后解释修订后的模式和USING表示法,就可以避免这个问题 - 并得到我的最高票数(对于使用JOIN表示法不同于其他人)。如果...你仍然可以得到我的最高票数 – 2010-03-22 00:21:50
如果每篇文章都有一个形象,为什么不把pictureurl列在文章表?在这种情况下,归一化没有任何好处。 – 2010-03-21 22:33:56