gpt4 book ai didi

mysql - 左外连接中的左侧是否可能仅重复一次

转载 作者:行者123 更新时间:2023-11-29 12:17:39 25 4
gpt4 key购买 nike

我有一个场景。不确定是否可以通过简单的 sql 查询来实现。

表1

create table table1 (rowno int,
fileid int,
filename varchar(50),
filedata varchar(50),
valid boolean
);

insert into table1 (RowNo , FileId , FileName , fileData , Valid) values
(1, 1, 'FileA', 'blah blah..', true),
(2, 1, 'FileA', 'blah blah..', true),
(3, 1, 'FileA', 'blah blah..', true),
(4, 1, 'FileA', 'blah blah..', true),
(1, 2, 'FileB', 'blah blah..', false),
(2, 2, 'FileB', 'blah blah..', true),
(3, 2, 'FileB', 'blah blah..', false);

上面将给出如下表格,-

RowNo | FileId | FileName | Data        | Valid
1 |1 | FileA | blah blah.. | TRUE
2 |1 | FileA | blah blah.. | TRUE
3 |1 | FileA | blah blah.. | TRUE
4 |1 | FileA | blah blah.. | TRUE
1 |2 | FileB | blah blah.. | FALSE
2 |2 | FileB | blah blah.. | TRUE
3 |2 | FileB | blah blah.. | FALSE

表2

create table table2 (fileid int,
rowno int,
errormsg varchar(100)
);
insert into table2 (fileid , rowno , errormsg ) values (2,1,'manatory field is blank');
insert into table2 (fileid , rowno , errormsg ) values (2,3,'date format is wrong');

上面将给出如下表格,-

FILEID  |ROWNO   |ERRORMSG   
2 |1 |manatory field is blank
2 |3 |date format is wrong

如果我将上表与以下查询连接起来,-

select distinct t1.FILENAME,tot.TOTALREC, VALIDREC,coalesce((tot.TOTALREC- VALIDREC),0)INVALIDREC, t2.Rowno , case when coalesce((tot.TOTALREC- VALIDREC),0)=0 then null else t1.filedata end as ErrorData , t2.errormsg as ErrorMessage
from table1 t1
join (select count(*) totalrec, fileid from table1 group by fileid)tot on t1.fileid=tot.fileid
join (select count(*) VALIDREC , fileid from table1 where valid=true group by fileid)valid on t1.fileid=valid.fileid
left outer join table2 t2 on t1.fileid=t2.fileid
order by t1.FILENAME;

我得到以下结果,-

实际结果

FILENAME | TOTALREC | VALIDREC | INVALIDREC | ROWNO | ERRORDATA | ERRORMESSAGE   
FileA | 4 | 4 | 0 | null | null | null
FileB | 3 | 1 | 2 | 1 |blah blah..| manatory field is blank
FileB | 3 | 1 | 2 | 3 |blah blah..| date format is wrong

但我需要如下结果集。

预期结果

FILENAME |TOTALREC|VALIDREC|INVALIDREC|ROWNO| ERRORDATA | ERRORMESSAGE   
FileA | 4 | 4 | 0 | null| null | null
FileB | 3 | 1 | 2 | 1 |blah blah..| manatory field is blank
| | | | 3 |blah blah..| date format is wrong

(注意最后一行的前四列。)

如果可能的话,有人可以帮我查询吗?

更新: 按照你们中许多人的要求澄清我的要求。

最佳答案

据我了解,如果某些字段与前一行中的相应字段相同,您希望将其留空?

无法直接在 MySQL 中执行此操作。您最好使用应用程序语言(PHP、VB、Java 等)来完成此操作。

可以使用@variables、IF()函数调用和ORDER BY来做到这一点。

关于mysql - 左外连接中的左侧是否可能仅重复一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29516005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com