Mysql 选择没有条件的行

Mysql 选择没有条件的行,mysql,Mysql,我知道标题没有意义,我不知道如何改写它。 这就是我现在面临的问题。我有一张桌子,一张大桌子,它有将近2米的行。这是该表,它已被NoRegis=1411940和Jumlah>0过滤 我想要的结果只包含具有Resep='R'的数据。大概是这样的: || Kode || Nama || Kali || Hari || Resep || Jumlah || ++======++======++======++======++=======++========++ ||DS-074||PARACE||3

我知道标题没有意义,我不知道如何改写它。 这就是我现在面临的问题。我有一张桌子,一张大桌子,它有将近2米的行。这是该表,它已被NoRegis=1411940和Jumlah>0过滤

我想要的结果只包含具有Resep='R'的数据。大概是这样的:

|| Kode || Nama || Kali || Hari || Resep || Jumlah ||
++======++======++======++======++=======++========++
||DS-074||PARACE||3     ||1     ||R      ||10.00   ||
||DS-119||ASP 81||1     ||1     ||R      ||5.00    ||
看,最后一个数据AL-242有两行,包括Resep='R'和Resep='A',我尝试了一些简单的方法,如

SELECT Kode,Nama,Kali,Hari,Resep,sum(Jumlah) FROM Frm_Ranap 
where NoRegis=1411940 and Jumlah>0 and resep<>'A' GROUP by Kode
但每次我尝试运行这个查询时,它都不会显示任何结果,也不会停止工作,可能是因为它有太多的数据


有什么建议吗?

让我们继续执行返回的第一个查询。您只需将A上的条件移动到having子句,而不是where子句:


having表达式统计每个组中的行数,即每个kode中与条件匹配的行数。=0指定组中没有此类行。

首先选择所有没有所需内容的行:

SELECT Kode FROM Frm_Ranap where resep<>'R' GROUP by Kode
然后选择所需的,但不选择第一个选项中的:

SELECT Kode,Nama,Kali,Hari,Resep,sum(Jumlah) FROM Frm_Ranap where NoRegis=1411940 and Jumlah>0 and Kode not in (SELECT Kode FROM Frm_Ranap where resep<>'R' GROUP by Kode) group by Jumlah

我想这可能对你有帮助

SELECT Kode,Nama,Kali,Hari,Resep,sum(Jumlah) 
FROM Frm_Ranap 
WHERE NoRegis=1411940 
AND Jumlah>0 
AND resep<>'A' 
AND SUBSTRING(Kode, 1, 2) != 'AL'
GROUP by Kode
子字符串kode,1,2!='AL'将筛选要删除的记录

您可以使用not exists选择不具有任何A类型Resep的kode。通常,当子查询返回较大的结果集且表已正确索引时,“not exists”比“not in”快

select Kode,Nama,Kali,Hari,Resep,sum(Jumlah) 
from Frm_Ranap t1
where NoRegis=1411940 and Jumlah>0 and Resep <> 'A' 
and not exists (select 1 from Frm_Ranap t2
where t2.Kode = t1.Kode and t2.Resep = 'A'
and t2.NoRegis = 1411940 and t2.Jumlah > 0)
group by Kode

此查询可以利用NoRegis、Kode、Resep、Jumlah上的复合索引

您的AL-242记录中有一条具有Resep!='A’-有R的那一个。你确定你的预期输出是正确的吗?是的,这就是为什么我在这里问,我不知道如何得到这样的结果。我不确定OP是否在寻找相同的查询,但在查看表之后,这是获得所需结果的一个好方法。荣誉我没有试过这个,但这不是应该消除所有以“AL”开头的Kode吗?我不想那样。我给你们看的数据只是一个例子,还有很多,我不知道我是否不需要所有以“AL”开头的kode是的,它将消除所有以“AL”开头的kode。到目前为止,这是正确的,但需要相当长的时间,有没有办法优化它?@student080705639。我唯一的建议是建立一个关于Frm_Rananoregis,Jumlah的索引。
SELECT Kode,Nama,Kali,Hari,Resep,sum(Jumlah) FROM Frm_Ranap where NoRegis=1411940 and Jumlah>0 and Kode not in (SELECT Kode FROM Frm_Ranap where resep<>'R' GROUP by Kode) group by Jumlah
SELECT Kode,Nama,Kali,Hari,Resep,sum(Jumlah) 
FROM Frm_Ranap 
WHERE NoRegis=1411940 
AND Jumlah>0 
AND resep<>'A' 
AND SUBSTRING(Kode, 1, 2) != 'AL'
GROUP by Kode
select Kode,Nama,Kali,Hari,Resep,sum(Jumlah) 
from Frm_Ranap t1
where NoRegis=1411940 and Jumlah>0 and Resep <> 'A' 
and not exists (select 1 from Frm_Ranap t2
where t2.Kode = t1.Kode and t2.Resep = 'A'
and t2.NoRegis = 1411940 and t2.Jumlah > 0)
group by Kode