首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:合并行并返回默认值

MySQL:合并行并返回默认值
EN

Stack Overflow用户
提问于 2013-04-30 14:10:15
回答 1查看 192关注 0票数 0

想象下表:

代码语言:javascript
复制
id | variant | name
-----------------------
1  | 1       | a
1  | 2       | b
1  | 3       | c
2  | 1       | d
2  | 2       | e
2  | 3       | NULL
3  | 1       | g

我需要运行哪条SQL语句才能得到这个结果:

  • 对于给定的id和给定的变量,请获取此组合的名称。
  • 但是,如果名称为NULL,则获取带有给定id的行的名称,但使用变量1(变量1的名称永远不会为空)。
  • 如果在给定变量中没有行,请再次使用具有相同id的变量为1的行。
  • 从来不直接请求变式1。

这就像一个倒车装置。或者您可以将其看作是变量= 1的行的重写值。

示例:

  • id = 1,变式= 2: B
  • id = 1,变式= 3: C
  • id = 2,变式= 3: d
  • id = 3,变式= 5: G

这在SQL中是可能的吗?如果将这种机制应用到更多的领域中,效果会好吗?

谢谢!

更新:

请注意,我希望这个机制不仅适用于名称字段。应该有更多的列,它们应该具有相同的行为--但每一列都应该单独处理。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-30 14:25:01

这应该可以使用LEFT JOIN来获得可选的值。

代码语言:javascript
复制
SELECT COALESCE(b.Name,a.Name)
FROM Table1 a
LEFT JOIN Table1 b
  ON a.id=b.id AND b.variant=@y
WHERE a.id=@x AND a.variant=1

一个要测试的SQLFiddle

就性能而言,这将取决于您需要如何应用查询来获得多个字段。如果您可以使用现有联接中的COALESCE来解决您的列选择,我看不出有什么大问题,但是如果您最终使用多个自联接来解决它,您可能会遇到问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16302005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档