从第二个表存储过程mysql中仅通过其ID选择一个图像

Posted

技术标签:

【中文标题】从第二个表存储过程mysql中仅通过其ID选择一个图像【英文标题】:Select only one image by its id from second table Stored procedure mysql 【发布时间】:2020-07-20 08:02:28 【问题描述】:
Table 1

id    name  value
1     test  22
2     test2  23


Table 2

id  tb_1  pic
1    1    img.png
2    1    img2.png
3    2    img3.png

我只想从第二张桌子中选择一张图片

试过

SELECT a.*, b.pic
  FROM tbl_one a
 INNER JOIN tbl_two f
    ON f.tbl_1 = (SELECT tbl_1
                    FROM tbl_two f2
                   WHERE f2.tbl_1 = a.id                  
                   GROUP BY f2.id 
                   LIMIT 1)

如何根据 tbl_1 id 只获取一张图片?

【问题讨论】:

无论何时使用LIMIT,您都需要一个ORDER BY 子句。 您的查询无法语法 - 没有表别名为 b 并且没有列 tbl_1 【参考方案1】:

我会建议一个相关的子查询:

SELECT a.*,
       (SELECT f2.pic
        FROM tbl_two f2
        WHERE f2.tbl_1 = a.id                  
        LIMIT 1
       ) pic
FROM tbl_one a;

您可以在子查询中使用ORDER BY 来选择哪个您想要的pic——比如最早的、最近的或随机的。

【讨论】:

【参考方案2】:

试试这个

LEFT JOIN tbl_two t2 ON (t2.id = (SELECT MIN(t2_.id  ) 
                                    FROM tbl_two t2_ 
                                   WHERE (t2_.tb_1   = a.id ) 
                                   LIMIT 1) )

【讨论】:

我认为ORDER BY 子句和LIMIT 子句是必需的。

以上是关于从第二个表存储过程mysql中仅通过其ID选择一个图像的主要内容,如果未能解决你的问题,请参考以下文章

使用第一个表的输出从第二个表中选择特定数据

内部联接仅从第二个表中选择基于日期的一行

在不借助 PL/SQL 的情况下从第二个表中查找相关值

MySQL从一个表中选择行,第二个表中有多行,并在所选行中获取多行数组

来自第二个表的 MySQL INNER JOIN (TOP10)

访问数据视图中的第二个表