Return 如果两列有相交值则为真
Return true if two columns have intersected values
我有两张桌子。如果至少有一个值相交,我想 return 为真:
1,2,7
和 7,4,0
- 7 个交叉点,return true
1,2,3
和 4,5,6
- 没有交集,return false
这样做的最佳方法是什么?
试试这个:
select distinct 'true'
from mytable
where column1 in (select column2 from mytable)
如果有匹配项,您会得到一行 'true'。
如果没有匹配项,您将不会获得任何行。
一种方法是使用 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
试试这个,使用内部连接
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'
我有两张桌子。如果至少有一个值相交,我想 return 为真:
1,2,7
和 7,4,0
- 7 个交叉点,return true
1,2,3
和 4,5,6
- 没有交集,return false
这样做的最佳方法是什么?
试试这个:
select distinct 'true'
from mytable
where column1 in (select column2 from mytable)
如果有匹配项,您会得到一行 'true'。
如果没有匹配项,您将不会获得任何行。
一种方法是使用 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
试试这个,使用内部连接
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'