mysql 如果存在 return 记录值而不是常规输出

mysql if exists return the record value instead of regular output

我想要 select if/exists 它 returns 'link' 值而不是常规输出。 所以 returns 而不是 '1' 'link'

这可能吗?

SELECT IF(
    EXISTS(
        SELECT link FROM modules WHERE module='license'
    ), 1, '/dashboard/'
)

MAX()(或 MIN())使用聚合:

SELECT COALESCE(MAX(link), '/dashboard/') link
FROM modules 
WHERE module = 'license';

如果 linkmodules 中不存在,那么 MAX() 将 return null 在这种情况下 COALESCE() 将 return '/dashboard/'.

@forpas 的解决方案是正确的,但是如果 table 很大,选择 MAX(link) 会变慢。我们不需要计算最大值,因为我们只对满足条件的 link 的存在感兴趣。

这是一个更复杂但更快捷的解决方案:

SELECT COALESCE(t2.link, '/dashboard/')
FROM
(
    SELECT 1 AS foo
) t
LEFT JOIN (
    SELECT link 
    FROM modules 
    WHERE module='license' AND
          (NOT (link IS NULL))
    LIMIT 0, 1
) t2
ON 1 = 1

解释:

  • 我们离开加入了一个虚拟 table 与一个生成的关系,如果它们存在你需要的链接
  • t 是一个虚拟 table 并且即使 t2 为空
  • 也能得到结果
  • t2如果没有符合条件的记录就会有0条记录
  • 如果至少有一条记录符合条件,
  • t2 将拥有您需要的所有链接
  • 如果有多个记录符合条件并且您需要它们,那么您可以从 t2
  • 中删除 LIMIT 子句
  • LIMIT 确保在找到第一个匹配项时停止搜索,而不是搜索最大值