假设我有一个表:
id | name | city
------------------
1 | n1 | n1
2 | n2 | c2
3 | n3 | n3
4 | n4 | c4
我想检查列内的插槽中是否已存在值。
某些值可能会在不同的列中多次出现,但不能在同一列中出现两次。
因此,例如n1出现在name
中,但也出现在city
中,但我不希望它在名称或城市中出现两次。
使用 PDO
您可以在按同一字段分组时使用计数:
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)
我有一个sql查询,它非常适合您想要的结果:
SELECT * FROM (SELECT * FROM table1 GROUP BY name) AS t GROUP BY city ORDER BY id
GROUP BY
是从一列中获取 ditinct 值(这里我们对 2 列使用 GROUP BY
2 次name
和 city
),AS t
是为派生表定义一个别名,ORDER BY
用于排序(这是可选的)
这是 SQLFiddle 演示