情况: 我有一个场景,我获取除了一个字段之外的所有字段相同的数据。我已经编写了一个存储过程来获取数据,使用来自不同表的许多连接。在我的情况下,我需要两种情况中的任何一种,具体取决于场景。 例如:
实际案例
|UserId | First name | Last name | IsRequired | IsDeleted |
1 harry tom true false
1 harry tom false false
3 ram sham true false
情境:
如果IsRequired上有两条记录分别为true和false,那么我需要一个IsRequired为true的案例。
问题:
现在的问题是我需要过滤掉select语句中的记录。
所以任何人都知道如何在select语句中做到这一点。
预期案例
| UserId | First name | Last name | IsRequired | IsDeleted |
1 harry tom true false
2 ram sham true false
答案 0 :(得分:1)
更新的解决方案:
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)
请参阅http://sqlfiddle.com/#!3/d178f/1/0
重现了完全相同的数据库结构。
答案 1 :(得分:0)
试试这个:这是我的想法。
步骤1:首先将IsRequired的数据类型值更改为BOOLEAN
。那么你所拥有的,在IsRequired列中包含的值如0
或1
。
步骤2:然后使用MAX()。 查询是
SELECT userId,firstname,lastname,MAX(IsRequired),IsDeleted FROM `table_name` GROUP BY userId