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

use*_*697 2 mysql sql

我有2张桌子,articleimage.

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

  • 查询所有文章

    SELECT * FROM article WHERE userid=100;

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

    SELECT * FROM image WHERE articleid = currentArticleId;

如何只用一个查询就可以实现同样的目的?

Luk*_*uke 10

您可以使用连接或子查询.


子查询:

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

SELECT * FROM image WHERE articleid IN (SELECT id FROM article WHERE userid=100);
Run Code Online (Sandbox Code Playgroud)

加入:

在这里,您告诉MySQL,articleidin image与表中的id列相关article.然后你可以从任一表中拉出列.这是一个淡化的解释,所以我建议你阅读链接.有各种类型的JOIN,这将导致不同的结果,所以你应该了解LEFT,RIGHT,OUTERINNER加入以确保结果集适合您的需求.在这种情况下,JOIN相当于一个INNER连接.

SELECT
    image.col1,
    image.col2,
    image.colX,
    article.col1,
    article.col2,
    article.colX
FROM image
JOIN article ON article.id = image.articleid;
Run Code Online (Sandbox Code Playgroud)