Sql:如何仅选择一条不存在id的记录

Sql:如何仅选择一条不存在id的记录,sql,select,informix,Sql,Select,Informix,我使用Informix数据库,其中有一个表坐标: 其中包含如下所示的数据: +-cm_key_coord_code-+-cm_t_coor-+-descr_coord-+ + 00000001 + 1 + coord01a + + 00000001 + 2 + coord01b + + 00000002 + 1 + coord02a + + 00000002

我使用Informix数据库,其中有一个表坐标:

其中包含如下所示的数据:

+-cm_key_coord_code-+-cm_t_coor-+-descr_coord-+
+ 00000001          +    1      + coord01a    +
+ 00000001          +    2      + coord01b    +
+ 00000002          +    1      + coord02a    +
+ 00000002          +    2      + coord02b    +
+ 00000003          +    1      + coord03a    +
+ 00000004          +    2      + coord04a    +
+ 00000005          +    1      + coord05a    +
+-------------------+-----------+-------------+
该表有多条记录,具有相同的cm_key_coord_代码,但不同的cm_t_coor。如何选择仅具有cm\U t\U coor!行的cm\U键\U坐标\U代码二?

我只想选择以下值:

+-cm_key_coord_code-+-cm_t_coor-+-descr_coord-+
+ 00000003          +    1      + coord03a    +
+ 00000005          +    1      + coord05a    +
+-------------------+-----------+-------------+

我将通过以下方式,通过小组讨论:

可以通过以下两种方式之一获取原始行。一种方法是将结果连接在一起或等效地使用in或exists:

或者,如果您知道始终只有一行,则可以使用聚合函数:

select c.cm_key_coord_code, min(cm_t_coor), min(descr_coord)
from coord c
group by c.cm_key_coord_code
having sum(case when c.cm_t_coor = 2 then 1 else 0 end) = 0

我将通过以下方式,通过小组讨论:

可以通过以下两种方式之一获取原始行。一种方法是将结果连接在一起或等效地使用in或exists:

或者,如果您知道始终只有一行,则可以使用聚合函数:

select c.cm_key_coord_code, min(cm_t_coor), min(descr_coord)
from coord c
group by c.cm_key_coord_code
having sum(case when c.cm_t_coor = 2 then 1 else 0 end) = 0

您也可以使用notexists子句来实现这一点。尝试:

SELECT c.cm_key_coord_code
FROM coord c
WHERE NOT EXISTS
(SELECT 1
 FROM coord c2
 WHERE c2.cm_key_coord_code = c.cm_key_coord_code
 AND c2.cm_t_coor = 2)

您也可以使用notexists子句来实现这一点。尝试:

SELECT c.cm_key_coord_code
FROM coord c
WHERE NOT EXISTS
(SELECT 1
 FROM coord c2
 WHERE c2.cm_key_coord_code = c.cm_key_coord_code
 AND c2.cm_t_coor = 2)

使用排序函数可能是一个错误solution@Vijey你能给我举个例子吗?如果有两行有特定的cm_键\u协调码,但一行的cm_t_协调=1,另一行的cm_t_协调=3怎么办?是否应返回一行或两行或两行都不返回?@kbball应返回cm_t_coor=1和cm_t_coor=3的两行。使用排序函数可以是solution@Vijey你能给我举个例子吗?如果有两行有特定的cm_键\u协调码,但一行的cm_t_协调=1,另一行的cm_t_协调=3怎么办?是否应该返回一行或两行,或者两行都不返回?@kbball应该返回cm_t_coor=1和cm_t_coor=3的两行。@Teja您可能应该添加更多关于您认为错误的信息。@Teja您可能应该添加更多关于您认为错误的信息。如果有两行具有特定cm_key_coor\u代码,但只有一行怎么办cm_t_coor=1,对于另一个,cm_t_coor=3?那么你的答案不会返回这些行,但我认为应该返回它们。如果有两行带有特定的cm_键协调代码,但一行的cm_t_coor=1,另一行的cm_t_coor=3怎么办?那么你的答案不会返回那些行,但我认为它们应该被返回
select c.cm_key_coord_code, min(cm_t_coor), min(descr_coord)
from coord c
group by c.cm_key_coord_code
having sum(case when c.cm_t_coor = 2 then 1 else 0 end) = 0
SELECT c.cm_key_coord_code
FROM coord c
WHERE NOT EXISTS
(SELECT 1
 FROM coord c2
 WHERE c2.cm_key_coord_code = c.cm_key_coord_code
 AND c2.cm_t_coor = 2)