说我有以下简单的表格SQL服务器:从第一次查询的空行集二次查询
表 { ID INT, 点名INT, 状态INT, 值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
(所以点名= 1,它将返回第1行中,点名= 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。 – JonH 2012-01-30 19:48:45