如果两列具有相交的值,则返回true

时间:2017-12-29 11:31:32

标签: sql intersection

我有两张桌子。如果至少有一个值相交,我想返回true:

1,2,77,4,0 - 7个相交,返回true

1,2,34,5,6 - 没有交叉点,返回false

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

试试这个,使用内连接

select case when exists ( select 1 from TableA as A inner join TableB as B on B.colA = A.colA) then 'TRUE' else 'FALSE' end as 'Intersects'

答案 1 :(得分:1)

试试这个:

select distinct 'true'
from mytable
where column1 in (select column2 from mytable)

如果匹配,您将获得一行' true'。
如果没有匹配,您将不会获得任何行。

答案 2 :(得分:1)

使用full join和条件聚合进行此操作的一种方法。

select max(case when t1.val=t2.val then 'true' else 'false' end) as intersect_or_no
from tbl1 t1
full join tbl2 t2 on t1.val=t2.val

注意:这在MySQL中不起作用,因为它不支持full join。然而,可以复制该行为。

exists的另一种方式。

SELECT coalesce(
              (SELECT 'true'
               FROM tbl1 t1
               WHERE EXISTS
                   (SELECT 1
                    FROM tbl2 t2
                    WHERE t1.val=t2.val)),'false') AS intersect_or_no