Sql 查询查找值为空的所有行,但具有相同值的另一行不为空(Mariadb)
Sql query find all rows where value is null but another row wih same value not null (Mariadb)
id_product|pn|ean13|supplier|
-----------------------------
1 |1F46G| FGH45642346|1|
2 |8BBBB| null |1|
3 |1F46G| null |2|
4 |1F46G| FGH45642346 |3|
你好,我有这样的 table 结构(只是更多行)。
我想要 select ean13 为空但存在一些具有相同 PN 但 ean13 不为空的行的所有行。
SELECT id_product,pn
FROM product
WHERE pn !='' AND (ean13 is null OR ean13 = '')
GROUP BY pn
HAVING count(pn)>1
这 Select 部分工作但显示不存在的行 下一行 ean13 不为空
我试过使用函数存在,但是持续时间真的很长。
基于您的精确描述的查询select ean13 为空的所有行,但存在一些 PN 相同但 ean13 不为空的行 看起来像下列的。没有任何迹象表明存在任何聚合。
我不知道你说的是什么意思我试过使用存在的函数,因为你没有包含这个。
select id_product, pn
from product p
where ean13 is null
and exists (
select * from product p2 where p2.pn = p.pn and p2.ean is not null
);
您可以如下重写查询以获得所需的输出。
编写子查询以识别具有 ean13 的 pn 不为空。
SELECT id_product,pn
from product
WHERE pn !='' AND (ean13 is null OR ean13 = '')
and pn in(
select pn from product where not (ean13 is null OR ean13 = '')
);
DB Fiddle: Result
id_product|pn|ean13|supplier|
-----------------------------
1 |1F46G| FGH45642346|1|
2 |8BBBB| null |1|
3 |1F46G| null |2|
4 |1F46G| FGH45642346 |3|
你好,我有这样的 table 结构(只是更多行)。
我想要 select ean13 为空但存在一些具有相同 PN 但 ean13 不为空的行的所有行。
SELECT id_product,pn
FROM product
WHERE pn !='' AND (ean13 is null OR ean13 = '')
GROUP BY pn
HAVING count(pn)>1
这 Select 部分工作但显示不存在的行 下一行 ean13 不为空
我试过使用函数存在,但是持续时间真的很长。
基于您的精确描述的查询select ean13 为空的所有行,但存在一些 PN 相同但 ean13 不为空的行 看起来像下列的。没有任何迹象表明存在任何聚合。
我不知道你说的是什么意思我试过使用存在的函数,因为你没有包含这个。
select id_product, pn
from product p
where ean13 is null
and exists (
select * from product p2 where p2.pn = p.pn and p2.ean is not null
);
您可以如下重写查询以获得所需的输出。 编写子查询以识别具有 ean13 的 pn 不为空。
SELECT id_product,pn
from product
WHERE pn !='' AND (ean13 is null OR ean13 = '')
and pn in(
select pn from product where not (ean13 is null OR ean13 = '')
);
DB Fiddle: Result