0

我有一个这样定义的表:

CREATE TABLE A_TEST  (
    "ID"   NUMBER NOT NULL ENABLE,
    "TYPE" VARCHAR2(20 BYTE),
)
  • ID 不是主键。
  • TYPE 可能为 NULL
  • 一个 ID 我可以有 0、1 或多个 TYPE。

如果我想获得不同类型的 ID,我将编写以下查询:

SELECT distinct a1.ID FROM A_TEST a1
  JOIN A_TEST a2 on a2.ID = a1.ID and a2.type != a1.type

但是我怎样才能找到我定义了单一类型的 ID?
(只有一行 Id 或多行 id 只有一个定义了类型)

4

3 回答 3

4

以下查询将返回表中只有一种 TYPE 的所有 ID。

SELECT ID FROM A_TEST
WHERE TYPE IS NOT NULL -- since TYPE column can be NULL for a given ID.
GROUP BY ID
HAVING COUNT(*) = 1

例如

CREATE TABLE A_TEST ( ID INT, TYPE INT)
INSERT INTO A_TEST VALUES(1, NULL)
INSERT INTO A_TEST VALUES(2, 0)
INSERT INTO A_TEST VALUES(3, 0)
INSERT INTO A_TEST VALUES(3, 1)
INSERT INTO A_TEST VALUES(4, 1)
INSERT INTO A_TEST VALUES(4, 1)
INSERT INTO A_TEST VALUES(5, 0)
INSERT INTO A_TEST VALUES(5, NULL)

SELECT 
    ID 
FROM 
    A_TEST
WHERE 
    TYPE IS NOT NULL -- since TYPE column can be NULL for a given ID.
GROUP BY ID
HAVING COUNT(ID) = 1

结果

ID
-----------
2
4
(2 row(s) affected)
于 2012-10-12T13:34:42.580 回答
3

此示例考虑了 NULL 值类型:

SELECT ID
FROM A_TEST
WHERE TYPE IS NOT NULL
GROUP BY ID    
HAVING COUNT(DISTINCT TYPE)=1

例如,参见SQL Fiddle

于 2012-10-12T13:37:21.240 回答
3

澄清后,您的要求似乎是:

SELECT ID
FROM A_TEST
GROUP BY ID    
HAVING COUNT(DISTINCT TYPE) = 1
    OR COUNT(*) = 1 ;
于 2012-10-12T14:12:09.353 回答