sql - Sql 查询查找 value 为空但另一行具有相同 value 不为空 (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 不为空

我试过使用功能存在,但持续时间真的很长。

回答1

根据您的精确描述 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
);

回答2

您可以如下重写查询以获得所需的输出。编写一个子查询来识别具有 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:https://dbfiddle.uk/?rdbms=mariadb_10.6&fiddle=36b38a795356fbe362da4558ac208a3f

相似文章

随机推荐

最新文章