mysql:如果一个结果集里包含另一个结果集,就显示1 否则显示0

select
if( EXISTS select
 * from l
 where t.name = l.name,1,0)
from t

如果t表里存在l表里的name 就显示1 否则显示0;

阅读 4.7k
2 个回答

如果t表数据量不大,用下面子查询的方式

select 
  t.name,
  if((select count(*) from l where l.name = t.name)> 0, 1, 0)
from t

表关联的方式,在大数据的时候效率会更高一些

select 
  t.name,
  IFNULL(t2.cnt, 0)
from t left join (
  select name, 1 as cnt
  from l
  group by name
) t2 on t.name = t2.name
SELECT
    name IN (SELECT name FROM l)
FROM
    t

下面这个,写明了表名(其实可以不写,主要是为了让你明确这个name字段是属于哪个表而已,因为子查询独立于父查询,所以不会有二义性问题)

SELECT
    t.name IN (SELECT l.name FROM l)
FROM
    t
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题