左加入查询保留一列空

问题描述:

我有一个叫PaymentMasterPaymentDetails的两个表和receiptID两列加入的列。这是我的查询左加入查询保留一列空

SELECT pm.receiptID 
      , pm.recievedAmount 
      , pd.invono 
      , pd.paidAmount 
    FROM PaymentMaster pm 
LEFT JOIN PaymentDetail pd ON pd.receiptID = pm.receiptID 

下面的查询提供给我这样的结果

enter image description here

注意,有两条记录PaymentDetails关于receiptID PAY0002。这就是为什么两个记录显示为PAY0002。 (INV0001,INV0002)。

问题是,我不想在两行中打印PAY0002。如果ID相同则列应empty.The最终的结果应该是这样的

enter image description here

+0

您试图实现的内容属于表示层而不是SQL层。您没有订购任何东西,因此INV0002的位置仅在INV0001的范围内意外。没有绝对的保证,它总是会出现在同一个地方,并且在SQL上下文中,“invono”没有其收据ID没有意义。 –

您可以使用关键字GROUP BY进行分组它们,您的查询就会变得像这样

SELECT pm.receiptID 
     , pm.recievedAmount 
     , pd.invono 
     , pd.paidAmount 
FROM PaymentMaster pm LEFT JOIN PaymentDetail pd ON pd.receiptID = pm.receiptID GROUP BY pd.receiptID 
+0

group by将删除整行。我只想删除两列值 –

+1

你将不得不在HTML /视图中处理显示数据的地方 –

+0

有没有什么办法可以通过查询来代替html –

您可以使用变量来控制显示内容

drop table if exists pm,pd; 
create table pm(id varchar(8), amt int); 
create table pd(id varchar(8), amt int); 

insert into pm values ('aaa',1000),('bbb','100'); 
insert into pd values ('aaa',100),('aaa',100),('bbb',100); 


Select case when rn = 1 then pmid else '' end as pmid, 
     case when rn = 1 then pmamt else '' end as pmamt, 
     pdid,pdamt 
from 
(
select pm.id pmid,pm.amt pmamt, 
     pd.id pdid, pd.amt pdamt 
     ,if(pm.id<> @p, @rn:=1,@rn:[email protected]+1) rn 
     ,@p:=pm.id 
from pm 
join pd on pd.id = pm.id 
,(select @rn:=0,@p:=0) rn 
) s