【问题标题】:sql find uniq row exclude different duplicate rowsql查找唯一行排除不同的重复行
【发布时间】:2017-07-16 13:10:17
【问题描述】:

我有一张桌子:

id field_id 删除 1 x001 0 2 x001 1 3 x001 0 4 x002 1 5 x003 0 6 x003 1 7 x004 0 8 x005 0

从这里我需要id 4,它有todelete = 1,它在field_id 中是独一无二的。 我目前的解决方案:

array = SELECT field_id WHERE todelete = 1 

从那个数组

SELECT field_id WHERE field_id = array[x] HAVING COUNT(field_id) = 1

似乎是错误的解决方案。我可以只用 SQL 的方式吗?谢谢

【问题讨论】:

  • 我相信这对你有帮助stackoverflow.com/q/8829975/6495084
  • 不,我认为它应该看起来像 select field_id where todelete = 1 有 count(field_id) = 1
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文? DB2?火鸟?

标签: sql row unique distinct-values


【解决方案1】:

你走在了正确的道路上。当然还有其他解决方案,但只有 2 个可以按您的意愿工作:

SQL Fiddle

MySQL 5.6 架构设置

CREATE TABLE Table1
    (`id` int, `field_id` varchar(4), `todelete` int)
;

INSERT INTO Table1
    (`id`, `field_id`, `todelete`)
VALUES
    (1, 'x001', 0),
    (2, 'x001', 1),
    (3, 'x001', 0),
    (4, 'x002', 1),
    (5, 'x003', 0),
    (6, 'x003', 1),
    (7, 'x004', 0),
    (8, 'x005', 0)
;

查询 1

SELECT id 
FROM Table1
WHERE field_id in 
    (SELECT field_id
     FROM Table1
     WHERE todelete = 1)
GROUP BY field_id
HAVING count(*)=1

Results

| id |
|----|
|  4 |

查询 2

SELECT id 
FROM Table1
WHERE todelete = 1
AND field_id in 
    (SELECT field_id
     FROM Table1
     GROUP BY field_id
     HAVING count(*)=1)

Results

| id |
|----|
|  4 |

【讨论】:

  • 第二个例子正是我所需要的。谢谢
猜你喜欢
  • 2018-01-05
  • 2023-03-16
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2011-05-29
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
相关资源
最近更新 更多