MySQL,根据列值从不同的行中选择
Posted
技术标签:
【中文标题】MySQL,根据列值从不同的行中选择【英文标题】:MySQL, selecting from a different row based on column value 【发布时间】:2014-09-01 07:45:56 【问题描述】:我有下表
---------------------------
|ID |Image | link |
|01 | | 02 |
|02 |steve.jpg | |
|03 |eric.jpg | |
----------------------------
链接字段存储ID,所以我可以设置两行之间的关系。
ID 01 的链接字段设置为 02。所以我希望 ID 01 使用 ID 设置在该字段中的图像,所以它将是 steve.jpg。
如何获取所有行,以便设置了链接字段的行以该图像结束?
【问题讨论】:
多么奇怪的架构。为什么链接和图片在同一张表中? 这是一个非常好的自毁架构:) 您应该将链接放在另一个表中。为什么在同一个表中? 请向我们展示您的预期结果 【参考方案1】:您可以使用自连接来显示链接 ID 的图像名称
select t.*,t1.Image as link_image
from t
left join t t1 on(t.link = t1.ID)
Demo
【讨论】:
【参考方案2】:SELECT a.id, b.image, a.link
FROM YourTable AS a
JOIN YourTable AS b ON a.link = b.id
UNION
SELECT id, image, link
FROM YourTable
WHERE link IS NULL
【讨论】:
谢谢。我已经尝试过了。它只会选择具有 ID 和链接的行。我需要所有行,但我需要用链接字段中的图像替换图像 我添加了一个UNION
来获取其他行。【参考方案3】:
类似这样的:
(SELECT ID, Image from mytable WHERE link = '' )
UNION ALL
(SELECT m1.ID as ID, m2.Image as Image
FROM mytable AS m1 INNER JOIN mytable AS m2 ON ( m1.link=m2.ID )
)
【讨论】:
实际上看起来它也能满足我的需要。您正在选择没有链接的所有行,然后加入这些行以便我们获得所有行,而不仅仅是具有关系的行 @user933791 使用左连接。联合会慢很多。 @JohnRuddell 也许桌子太小而无法考虑速度。 “联合”解决了这个问题并保持了行的格式。 @MichaelLivach 和左连接不保持格式?您甚至看过mkhalid的答案吗?发布的演示显示它将从表中提取所有内容,然后添加图像名称(如果存在)..并且代码更加简洁。 @JohnRuddell 是的,我看了。在 mkhalid 的解决方案中,您有 2 列(“Image”和“link_image”)而不是 1以上是关于MySQL,根据列值从不同的行中选择的主要内容,如果未能解决你的问题,请参考以下文章