从单个查询中的2个表中选择

时间:2014-09-30 11:45:24

标签: mysql sql

我有2个表,articleimage

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

  • 查询所有文章

    SELECT * FROM article WHERE userid=100;

  • 然后循环浏览这些文章,并使用以下内容提取图像:

    SELECT * FROM image WHERE articleid = currentArticleId;

如何通过一个查询实现同样的目标?

5 个答案:

答案 0 :(得分:10)

您可以使用联接或子查询。


Subquery:

将执行子查询(括号中包含的第二个查询),并且将返回返回的ID以标识要从中获取的初始查询中的哪些行。因此,如果您想象子查询返回(1,2,3),则初始查询将查找列出的WHERE articleidIN

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

Join

在这里,您告诉MySQL articleid中的imageid表中的article列相关。然后你可以从任一表中拉出列。这是一个淡化的解释,所以我建议你阅读链接。有各种类型的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;

答案 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的答案,但在加入表格时,您需要注意正确的加入

  1. 内部加入(默认加入):当相应的记录时 出现在参与表中
  2. 外部加入(可以     左,右或全):当一张或两张桌子都没有     匹配记录
  3. 在您的情况下,某些用户可能没有图片。

    --//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; );

希望这会对你有所帮助。