SQL Check列不止一次出现

时间:2012-04-30 12:41:41

标签: sql db2 unique

考虑一个表A.表A有一个名为 INNETTEDTXNID 的列,它不是主键,既不是唯一的也可以是null。

我根据某些条件在表A上有一个select *(与列INNETTEDTXNID无关)。

对于上面提取的每一行,我必须找到一个名为 isNetted 的值。 isNetted 的概念是,如果此行的 INNETTEDTXNID 列在整个表格(包括此行)中出现多次,则的值为 / strong>对于这一行都是如此。

我希望我的问题很明确。感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

可能没有 - 效率最高的地方,但它有效。

SELECT TableA.INNETTEDTXNID, 
 CASE
 WHEN NetChk.INNETTEDTXNID IS NOT NULL Then 1
 ELSE 0
 END AS isNetted
FROM TABLEA
LEFT JOIN (
          SELECT INNETTEDTXNID 
          FROM TableA
          GROUP BY INNETTEDTXNID
          HAVING COUNT(INNETTEDTXNID) >1) 
NetChk ON TableA.INNETTEDTXNID = NetChk.INNETTEDTXNID

答案 1 :(得分:1)

这将返回出现多次的任何条目的值。

SELECT a.INNETTEDTXNID
FROM TableA as a, TableA as b
WHERE
    not a.id=b.id
    and a.INNETTEDTXNID=b.INNETTEDTXNID

如果您尝试专门执行此操作以检查单个数字是否出现多次,则可以执行类似

的操作
SELECT COUNT(INNETTEDTXNID)
FROM TableA
WHERE INNETTEDTXNID='value'

如果它返回一个,那么它的唯一性,对于多个它不唯一。如果你想要它返回真或假的东西你可以使用

SELECT 
    CASE WHEN (
        SELECT COUNT(INNETTEDTXNID)
        FROM TableA
        WHERE INNETTEDTXNID='value'
    )>1 THEN 'True'
    ELSE 'False'
    END
    AS isNetted