答案 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 '];
}
}
}
}