当前位置: 首页 > 知识库问答 >
问题:

显示列值不显示在另一列的同一组中的行

连正信
2023-03-14

我试图编写正确的查询,但它们显示的结果不正确。例如,我有表ABC:

id   a_id   b_id    c
1    10     100
2    10     111
3    11     111 
4    11     222     
5    11     333     111&&222&&333
6    12     444 
7    12     555     444&&111

在c栏中只能b_id

7    12     555     444&111

因为111在a_id10或11不是12我怎样才能找到它?我需要找到列C中发生(无效)值b_id的所有行,它们不在同一个a_id中。Sql(postgresql)不能正常工作,为什么?感谢任何帮助。

我的sql:

    SELECT * from ABC x
    WHERE x.id IN (SELECT y.id
            FROM ABC y 
    WHERE x.a_id = y.a_ai AND y.c NOT LIKE '%'||x.b_id||'%' 

共有2个答案

司凡
2023-03-14

假设b_id在表中是唯一的,可以使用:

select abc.*
from abc
where exists (select 1
              from abc abc2
              where abc2.a_id = abc.a_id and
                    concat('&&', abc2.c, '&&') not like concat('%&&', abc.b_id, '&&%')
             );
邓高韵
2023-03-14

使用regexp_split_to_table()将分隔字符串拆分为行。然后使用反连接方法来查找不匹配的条目:

with t1 as (
  select *, regexp_split_to_table(c, '&&')::int AS split_c
  from abc
  where c <> ''
)
select distinct t1.id, t1.a_id, t1.b_id, t1.c
from t1
left join abc t2
  on  t2.a_id = t1.a_id
  and t2.b_id = t1.split_c
where t2.a_id is null

请参阅db fiddle上的演示。通用域名格式

您还可以使用不存在子查询,而不是反联接:

with t1 as (
  select *, regexp_split_to_table(c, '&&')::int AS split_c
  from abc
  where c <> ''
)
select distinct t1.id, t1.a_id, t1.b_id, t1.c
from t1
where not exists (
  select *
  from abc t2
  where t2.a_id = t1.a_id
    and t2.b_id = t1.split_c
)

如果您还想知道c中的哪个值是错误的,请替换选择distinct 使用选择t1* 。您将在split\u c列中找到“错误”值。或者使用GROUP BYarray_agg()在一行中列出所有错误的值:

with t1 as (
  select *, regexp_split_to_table(c, '&&')::int AS split_c
  from abc
  where c <> ''
)
select t1.id, t1.a_id, t1.b_id, t1.c, array_agg(t1.split_c) as wrong_c
from t1
left join abc t2
  on  t2.a_id = t1.a_id
  and t2.b_id = t1.split_c
where t2.a_id is null
group by t1.id, t1.a_id, t1.b_id, t1.c

 类似资料:
  • 请为Pandas提供pyspark dataframe替代方案。 另外,我不需要,而是希望检查该列中的distinct值。

  • 使用pyspark数据帧,你如何做相当于熊猫 我想列出pyspark数据框列中的所有唯一值。 不是 SQL 类型方式(注册模板,然后 SQL 查询不同的值)。 此外,我不需要< code>groupby然后< code>countDistinct,而是希望检查该列中的不同值。

  • 假设一个程序生成多个线程来执行与不同版本的对象交互的相同类型的序列。如何在序列图中对其建模? 假设一个线程被复制n次,然后这个线程对对象a、B和C执行一些操作n次。如何在序列图中显示它?

  • 我试图编写一个程序,使用TableView在javafx gui中显示数据库中表的内容。我有一个通用gui,其中有一个空的TableView。在确定要显示的表之后,应用程序将表名发送给中间件,中间件从数据库中获取所有列名,并将其BACC发送给应用程序。然后循环所有列名,生成一个新的TableColumn并将其添加到TableView中,并调用TableView的方法。使用我可以看到这些列成功地添加

  • 本文向大家介绍按一列分组,并在MySQL中用分隔符显示另一列的相应记录,包括了按一列分组,并在MySQL中用分隔符显示另一列的相应记录的使用技巧和注意事项,需要的朋友参考一下 为此,将GROUP_CONCAT()与GROUP BY一起使用。在这里,GROUP_CONCAT()用于将来自多行的数据连接到一个字段中。 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表

  • 我用的是Jasper reports 6.17,我在Jasper Studio里做了一个列表。 列表中只有两个名为“test1”和“test2”的项目,但只显示了一个,我不知道为什么。生成的PDF仅显示“test2”,为什么缺少“test1”?如果我添加10项,第一行将丢失。 jrxml文件是: java文件是: