想象下表:
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语句才能得到这个结果:
这就像一个倒车装置。或者您可以将其看作是变量= 1的行的重写值。
示例:
这在SQL中是可能的吗?如果将这种机制应用到更多的领域中,效果会好吗?
谢谢!
更新:
请注意,我希望这个机制不仅适用于名称字段。应该有更多的列,它们应该具有相同的行为--但每一列都应该单独处理。
发布于 2013-04-30 14:25:01
这应该可以使用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一个要测试的SQLFiddle。
就性能而言,这将取决于您需要如何应用查询来获得多个字段。如果您可以使用现有联接中的COALESCE来解决您的列选择,我看不出有什么大问题,但是如果您最终使用多个自联接来解决它,您可能会遇到问题。
https://stackoverflow.com/questions/16302005
复制相似问题