如果两个不同表中的两个相同列具有值,如何返回true?的SQL

时间:2018-06-28 18:18:00

标签: sql pivot-table

Table_A Table_B

回到这里,再问另一个问题!

因此,我们有两个数据透视表Table_A和Table_B。两个表都有相同的列。

我试图编写一个查询,该查询将遍历每一行并仅在具有相同ID的记录在“值”字段中具有值的情况下才返回true。 因此,例如,对于记录ID3,Table_A具有“ sdnbfsj”值,而对于同一记录ID,Table_B在“值”字段下具有值。

该查询应该能够验证两个表中的相同单元格是否具有值,如果有,则返回true。如果表总共只有三条记录,则返回true,但是请注意,记录ID 5在Table_A中有一个值,但记录ID 5在Table_B中为NULL。因此查询应返回false。

这是我到目前为止所拥有的:

SELECT source_column from 
(
select source_column from Table_A WHERE Value_Inserted=1
EXCEPT
select source_column from Table_B WHERE Value_Inserted=1
)X
WHERE source_column  IN 
(
'Col_1'
,'COl_2'
,'Col_3'
,'Col_4'
)

3 个答案:

答案 0 :(得分:0)

首先应该在id上联接两个表,然后根据您的情况进行计数,这样就可以做到这一点。然后...返回“ true”或“ false”

SELECT CASE WHEN SUM(CASE WHEN t1.value IS NOT NULL AND t2.value IS NOT NULL THEN 1 ELSE 0 END) = Count(*) THEN 'True' ELSE 'False' END as test
FROM table_a as t1
    INNER JOIN table_b as t2 ON
        t1.id = t2.id

语法可能会有所不同,具体取决于您使用的RDBMS。

答案 1 :(得分:0)

我想你想要

select min(case when a.value is not null and a.value is null then 0
                when a.value is null a and a.value is not null then 0
                else 1
           end) as flag
from a join
     b
     on a.class = b.class and a.source_col = b.source_col;

这会将1视为true,将0视为false。

答案 2 :(得分:0)

取决于您使用的 DBMS

对于 Oracle ,使用nvl2函数:

select nvl2(a.value, 1, 0) * nvl2(b.value, 1, 0)
  from Table_A a
 inner join Table_B b
    on (a.ID = b.ID);

对于 MSSQL ,可以使用convertcast函数:

select   convert(int, ( case when IsNull(a.value,'0') = '0' then '0' 
              else '1' 
         end ))
         *
         convert(int, ( case when IsNull(b.value,'0') = '0' then '0' 
              else '1' 
         end )) as result
  from Table_A a
 inner join Table_B b
    on (a.ID = b.ID);

对于 MySQL ,使用IfNull函数:

select   ( case when IfNull(a.value,'0') = '0' then '0' 
              else '1' 
         end )
         *
         ( case when IfNull(b.value,'0') = '0' then '0' 
              else '1' 
         end ) as result
  from Table_A a
 inner join Table_B b
    on (a.ID = b.ID);

对于 PostGreSQL ,请使用coalesce函数:

select   cast( ( case when coalesce(a.value,'0') = '0' then '0' 
              else '1' 
         end ) as int )
         *
         cast( ( case when coalesce(b.value,'0') = '0' then '0' 
              else '1' 
         end ) as int ) as result
  from Table_A a
 inner join Table_B b
    on (a.ID = b.ID);

所有这些都给出以下结果

result
  0
  0
  1
  0
  0
相关问题