假设我有一张桌子:
id | name | city
------------------
1 | n1 | n1
2 | n2 | c2
3 | n3 | n3
4 | n4 | c4
我想检查列中的插槽中是否已存在值。
某些值可能会在不同的列中多次出现,但不得在同一列中出现两次。
例如,n1出现在name
中,但也出现在city
中,但我不希望它出现在名称或城市中两次。
使用PDO
答案 0 :(得分:2)
您可以在按相同字段分组时使用计数:
SELECT COUNT(`name`) as count_name FROM `cities` GROUP BY `name` HAVING count_name > 1
这将为您提供多次出现的名称列表。
如果要阻止它发生,请在名称字段上设置唯一约束,并在城市字段上设置唯一约束。您可以使用此SQL执行此操作:
ALTER TABLE cities ADD UNIQUE (name)
ALTER TABLE cities ADD UNIQUE (city)
答案 1 :(得分:0)
我有一个sql查询,它可以完美地满足你想要的结果:
SELECT * FROM (SELECT * FROM table1 GROUP BY name) AS t GROUP BY city ORDER BY id
GROUP BY
是为了从列中获取ditinct值(我们在GROUP BY
使用name
两次city
和AS t
)和ORDER BY
是定义派生表的别名,{{1}}用于排序(这是可选的)
以下是SQLFiddle演示