如果有人可以在这里指出我先前存在的问题,那就太好了。结果我找不到这个案子。
查看SQL Fiddle以修补它。为了SO搜索能力,这里是模式和小提琴的问题:
在我的用户表中,我有一个独特的约束 用户被分配到的国家/地区(不超过一个用户) 每个国家)。但是,他们可以住在他们选择的任何地方。
我只想返回指定国家/地区的用户 住所仅在记录中出现一次,在本案例中为记录4, 其中不希望跨列重复 并且行之间没有重复项。怎么样?! :)
CREATE TABLE users
(`id` int,
`country` varchar(255),
`domicile` varchar(255), UNIQUE(country)
)
;
INSERT INTO users
(`id`, `country`, `domicile`)
VALUES
# Duplicate across column and row
(1, "usa", "usa"),
(2, "canada", "usa"),
# Duplicate only across columns or no duplication
(3, "mexico", "mexico"),
(4, "uganda", "australia"),
# Duplicate only across rows
(5, "germany", "portugal"),
(6, "france", "portugal"),
(7, "spain", "portugal")
;
暂时搁置一边,正确的设计会让这更容易。我只是想用已经处理过的手来处理。 ;)
答案 0 :(得分:2)
我认为这是最简单的方法:
SELECT *
FROM users
GROUP BY domicile
HAVING COUNT(*) = 1
与Eugen的答案不同,这个答案取决于country
列具有唯一约束的事实,因此它只需要检查domicile
。
答案 1 :(得分:1)
如果我理解正确,你想在国家和住所进行重复数据删除 - 所以我们需要两个步骤:
SELECT
MIN(id),
country,
domicile,
COUNT(*) AS domnum
FROM (
SELECT
MIN(id) AS id,
country,
domicile,
COUNT(*) AS counum
FROM users
GROUP BY country
HAVING counum=1
) AS base
GROUP BY domicile
HAVING domnum=1
修改强>
使用您的测试数据,跨越住所的重复数据删除就足够了,但无论如何我都包含了这两个步骤。
修改强>