选择没有其他行值的行

时间:2018-01-23 11:01:54

标签: mysql sql

我有一个包含此示例数据的表:

enter image description here

如何只选择蓝线?
我不需要绿线,因为MSISDN 998973309817在IDENT_NUMBER列中有一行值...

P.S。无论有没有重复,结果都无关紧要

5 个答案:

答案 0 :(得分:5)

试试这个

SELECT * from mytable where MSISDN not in
(
SELECT MSISDN from mytable where IDENT_NUMBER is not null
)

Note:不要忘记将“mytable”替换为您的数据库表名

答案 1 :(得分:1)

这将返回所有//Make an array list of custom objects List<User> userList = new ArrayList<User>(); userList.add(new User("ani","bha","abcd@gg.com","Monday")); userList.add(new User("ani2","bha2","abcd2@gg.com","Tuesday")); userList.add(new User("ani5","bha5","abcd5@gg.com","Monday")); userList.add(new User("ani2","bha2","abcd2@gg.com","Tuesday")); userList.add(new User("ani5","bha5","abcd5@gg.com","Monday")); ,其中只有一行具有该MSISDN。

MSISDN

这将返回SELECT MIN(id) AS id, MSISDN AS MSISDN, MIN(IDENT_NUMBER) AS IDENT_NUMBER FROM your_table GROUP BY MSISDN HAVING COUNT(*) = 1 中只有MSISDN的所有NULL

IDENT_NUMBER

其中每个只解析一次表格,因此通常比使用SELECT MSISDN FROM your_table GROUP BY MSISDN HAVING MAX(IDENT_NUMBER) IS NULL IN()EXISTS()的任何答案都快。

答案 2 :(得分:1)

基于未选择最后一行的事实,我想你想要:

select t.*
from t
where t.id <= (select max(t2.id)
               from t
               where t2.msisdn = t.msisdn and t2.ident_number is not null
              );

这将仅选择具有有效ident_number的最后一行的行。如果没有有效ident_number的行,则子查询返回NULL,因此外部比较失败(对于msisdn)。

编辑:

以上返回绿色行。蓝线是:

select t.*
from t
where t.id > coalesce( (select max(t2.id)
                         from t
                         where t2.msisdn = t.msisdn and t2.ident_number is not null
                         ), 0)

答案 3 :(得分:0)

Rakesh的答案会起作用,但这是另一种方法。

您选择DataTable中的所有行,然后执行

DataTable dataTable = Select....
DataTable finalDT = dataTable.Clone();

foreach(DataRow dr in dataTable.Rows)
{
    bool exist = finalDT.AsEnumerable().Any(row => msisdn == row.Field<String>("MSISDN"));
    if(!exist)
    {
        finalDt.Rows.Add(row);
    }
}

*我是从头开始编写的,代码没有经过测试,所以可能有些错误。如果有任何写下来。

答案 4 :(得分:0)

$sql = "SELECT ID, MSISDN, IDENT_NUMBER FROM table_name";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
       $key = $row['MSISDN'];
       if(!is_null($row['IDENT_NUMBER'])) {
         $green[$key] = $row['IDENT_NUMBER'];
         if(array_key_exits($blue, $key)) { unset($blue[$key]); }
       } else {
         if(!array_key_exits($green, $key)) {
           $blue[$key] = $row['IDENT_NUMBER '];
         }
       }
    }
} 
  1. 尝试使用两个数组来存储信息
  2. 从DB
  3. 中选择信息
  4. 按IDENT_NUMBER分类信息
  5. 没有重复。