左加入查询保留一列空
我有一个叫PaymentMaster
和PaymentDetails
的两个表和receiptID
两列加入的列。这是我的查询左加入查询保留一列空
SELECT pm.receiptID
, pm.recievedAmount
, pd.invono
, pd.paidAmount
FROM PaymentMaster pm
LEFT JOIN PaymentDetail pd ON pd.receiptID = pm.receiptID
下面的查询提供给我这样的结果
注意,有两条记录PaymentDetails
关于receiptID PAY0002
。这就是为什么两个记录显示为PAY0002
。 (INV0001,INV0002
)。
问题是,我不想在两行中打印PAY0002
。如果ID相同则列应empty.The最终的结果应该是这样的
您可以使用关键字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
group by将删除整行。我只想删除两列值 –
你将不得不在HTML /视图中处理显示数据的地方 –
有没有什么办法可以通过查询来代替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
您试图实现的内容属于表示层而不是SQL层。您没有订购任何东西,因此INV0002的位置仅在INV0001的范围内意外。没有绝对的保证,它总是会出现在同一个地方,并且在SQL上下文中,“invono”没有其收据ID没有意义。 –