【问题标题】:Return true if two columns have intersected values如果两列具有相交的值,则返回 true
【发布时间】:2017-12-29 11:31:31
【问题描述】:

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

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

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

最好的方法是什么?

【问题讨论】:

  • 这是什么数据库? sql server/oracle/mysql?请相应地更新标签。
  • 您在示例或列中提到的行级别的数据??
  • 列级值

标签: sql intersection


【解决方案1】:

试试这个,使用内连接

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'

【讨论】:

    【解决方案2】:

    试试这个:

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

    如果有匹配项,您将得到一行“true”。
    如果没有匹配,您将不会得到任何行。

    【讨论】:

      【解决方案3】:

      使用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
      

      【讨论】:

        猜你喜欢
        • 2017-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 2018-01-04
        • 2012-07-31
        相关资源
        最近更新 更多