gpt4 book ai didi

MySQL:合并行并返回默认值

转载 作者:行者123 更新时间:2023-11-29 08:32:09 25 4
gpt4 key购买 nike

想象一下下表:

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 的名称决不为 NULL)。
  • 如果没有包含给定变体的行,请再次使用具有相同 ID 的变体为 1 的行。
  • 永远不会直接请求变体 1。

这就像一个后备机制。或者您可以将其视为覆盖变量 = 1 的行的值。

示例:

  • id = 1,变体 = 2:b
  • id = 1,变体 = 3:c
  • id = 2,变体 = 3:d
  • id = 3,变体 = 5:g

这可以用 SQL 实现吗?如果该机制应用到更多领域,效果是否良好?

谢谢!

更新:

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

最佳答案

这应该可以满足您使用LEFT JOIN 获取可选值的需要。

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

An SQLFiddle to test with .

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

关于MySQL:合并行并返回默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com