Mysql 在重复条目的情况下获取特定条目
情况: 我有一个场景,在这个场景中,除了一个字段之外,所有字段都是相同的。我编写了一个存储过程,使用不同表中的许多连接来获取数据。在我的情况下,我需要两种情况中的任何一种,具体取决于场景。 例如: 实际案例Mysql 在重复条目的情况下获取特定条目,mysql,sql,sql-server,Mysql,Sql,Sql Server,情况: 我有一个场景,在这个场景中,除了一个字段之外,所有字段都是相同的。我编写了一个存储过程,使用不同表中的许多连接来获取数据。在我的情况下,我需要两种情况中的任何一种,具体取决于场景。 例如: 实际案例 |UserId | First name | Last name | IsRequired | IsDeleted | 1 harry tom true false 1 harry
|UserId | First name | Last name | IsRequired | IsDeleted |
1 harry tom true false
1 harry tom false false
3 ram sham true false
场景:
| UserId | First name | Last name | IsRequired | IsDeleted |
1 harry tom true false
2 ram sham true false
SELECT UserId, First name, Last name, IsRequired, IsDeleted FROM table WHERE UserId IN (SELECT UserId FROM users GROUP BY UserId HAVING count(distinct(IsRequired)) > 1) and IsRequired = 'true'
UNION
SELECT UserId, First name, Last name, IsRequired, IsDeleted FROM table WHERE UserId IN (SELECT UserId FROM users GROUP BY UserId HAVING count(IsRequired) = 1)
若有两条记录分别为IsRequired true和false,那个么我需要一个IsRequired true的案例
问题:
| UserId | First name | Last name | IsRequired | IsDeleted |
1 harry tom true false
2 ram sham true false
SELECT UserId, First name, Last name, IsRequired, IsDeleted FROM table WHERE UserId IN (SELECT UserId FROM users GROUP BY UserId HAVING count(distinct(IsRequired)) > 1) and IsRequired = 'true'
UNION
SELECT UserId, First name, Last name, IsRequired, IsDeleted FROM table WHERE UserId IN (SELECT UserId FROM users GROUP BY UserId HAVING count(IsRequired) = 1)
现在的问题是,我需要过滤掉select语句中的记录
因此,任何人都不知道如何在select语句中实现这一点
预期情况:
| UserId | First name | Last name | IsRequired | IsDeleted |
1 harry tom true false
2 ram sham true false
SELECT UserId, First name, Last name, IsRequired, IsDeleted FROM table WHERE UserId IN (SELECT UserId FROM users GROUP BY UserId HAVING count(distinct(IsRequired)) > 1) and IsRequired = 'true'
UNION
SELECT UserId, First name, Last name, IsRequired, IsDeleted FROM table WHERE UserId IN (SELECT UserId FROM users GROUP BY UserId HAVING count(IsRequired) = 1)
更新的解决方案:
| UserId | First name | Last name | IsRequired | IsDeleted |
1 harry tom true false
2 ram sham true false
SELECT UserId, First name, Last name, IsRequired, IsDeleted FROM table WHERE UserId IN (SELECT UserId FROM users GROUP BY UserId HAVING count(distinct(IsRequired)) > 1) and IsRequired = 'true'
UNION
SELECT UserId, First name, Last name, IsRequired, IsDeleted FROM table WHERE UserId IN (SELECT UserId FROM users GROUP BY UserId HAVING count(IsRequired) = 1)
请看
复制了完全相同的数据库结构。试试这个:这是我的主意 步骤1:首先将IsRequired的数据类型值更改为
布尔值
。因此,在IsRequired列中,您所拥有的内容包含类似于0
或1
的值
步骤2:然后使用MAX()。
疑问是
在select queryDo中尝试Distinct您需要MySQL的解决方案吗,SQL Server或两者兼而有之?
select*from table where IsRequired='true'
?我不能使用select*from table where IsRequired='true',因为它将使用IsRequired true筛选其他记录。获取错误选择列表,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。哦。您正在使用SQL Server吗?我以为你需要MySQL的解决方案。我已经更新了答案。请现在检查并告诉我它是否有效。我现在没有安装SQL Server的版本,因此无法确定它是否能正常工作。它不工作计数>0返回零记录。它工作正常。我已经在sql FIDLE中复制了相同的数据库结构。见此: