Sql查询查找值为空但另一行具有相同值但不为空的所有行(Mariadb)

kmb7vmvb  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(143)
id_product|pn|ean13|supplier|
-----------------------------
1 |1F46G| FGH45642346|1|
2 |8BBBB| null |1|
3 |1F46G| null |2|
4 |1F46G| FGH45642346 |3|

你好,我有这样的表结构(只是更多的行)。
我想选择ean13为空的所有行,但存在一些PN相同但ean13不为空的行。

SELECT id_product,pn
                FROM product
                WHERE pn !='' AND (ean13 is null OR ean13 = '')
                GROUP BY pn
                HAVING count(pn)>1

此选择部分起作用,但显示不存在的行,下一行具有非空的ean13
我试过使用功能存在但持续时间真的很长。

ki0zmccv

ki0zmccv1#

基于您的精确描述的查询 * 选择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
);
ovfsdjhp

ovfsdjhp2#

您可以如下所示重写查询以获得所需的输出。编写一个子查询以标识具有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小提琴:Result

相关问题