【发布时间】:2015-05-27 22:04:41
【问题描述】:
假设我有以下简单的表格
表一个 { id int, pointId int, 状态整数, 价值整数 }
id pointId state value
-------------------------------
1 1 2 xxxxx
2 3 2 xxxxx
3 3 2 xxxxx
4 3 1 xxxxx
使用以下两个查询:
SELECT * FROM a WHERE state = 1 and pointId = x
SELECT * FROM a WHERE state = 2 and pointId = x
有没有办法组合这两个查询,以便:
- 如果查询 1 返回 >0 行,则返回查询 1 的结果
- 如果查询 1 返回 0 行,则返回查询 2 的结果
(因此对于 pointId = 1 它将返回第 1 行,对于 pointId = 3 它将返回第 4 行)
我一直在尝试将两者与一个联合做类似的事情
SELECT * FROM a WHERE state = 1 AND pointId = x
UNION ALL
SELECT * FROM a WHERE state = 2 AND pointId = x and
pointId NOT IN (SELECT pointId FROM a WHERE state = 1 AND pointId = x)
我想知道我是否让这种方式变得复杂,是否有更简单的方法。我意识到我可以只运行第一个查询,然后在我的代码中处理它,但如果我能在 sql 中执行此操作会非常好。 任何建议或指示都会很棒!
谢谢,
一个
【问题讨论】:
-
在这种情况下您不应该使用 UNION。您不希望合并记录 - 您希望根据
EXISTS处理查询 1 或查询 2。
标签: sql sql-server