检查MYSQL中是否存在记录

时间:2013-12-13 16:00:30

标签: mysql sql

我的问题是关于表中记录的存在。我怎么能得到一个结果列表,它真正通知我正在寻找des或不存在的记录? 我的意思是,我知道我可以检查像

这样的查询存在什么
SELECT field FROM table WHERE unique_field IN (value1, value2)

这将向我展示那些实际存在的记录。但是,如果我想要一个结果如下:

+--------------+-------+
| unique_field | exists|
+--------------+-------+
| value1       | 1     |
| value2       | 0     |
+--------------+-------+

是否可以这样做?

4 个答案:

答案 0 :(得分:1)

您也可以使用值的“参考”表来执行此操作:

select ref.val,
       (exists (select 1 from table t where t.unique_field = ref.val)) as `exists`
from (select 'value1' as val union all
      select 'value2' as val
     ) ref;

您也可以将其标记为left outer join

select ref.val,
       (t.unique_field is not null) as `exists`
from (select 'value1' as val union all
      select 'value2' as val
     ) ref left outer join
     table t
     on t.unique_field = ref.val;

这是有效的,因为table中的字段是唯一的(否则,您可能会获得重复的行或需要聚合)。

答案 1 :(得分:0)

检查count(*)以获取记录的编号,如果是returns 0,则表示没有记录

表中的

SELECT count(*) FROM table WHERE unique_field IN (value1, value2);

答案 2 :(得分:0)

没有你希望的那么好,但是

select '1', exists(select null from t1 where val = 1) 'exists'
union
select '2', exists(select null from t1 where val = 2) 

SELECT 
id as unique_field, exists(select null from t1 where val = id) as 'exists'
FROM (
  SELECT 1 as id
  union 
  SELECT 2
  union
  select 3
  union
  select 4
) q;

请参阅SqlFiddle

答案 3 :(得分:0)

使用EXISTS(),它会在点击时停止搜索更多行,因此搜索大表时不会有太多开销。

SELECT 'value1' AS unique_field, EXISTS(SELECT 1 FROM your_table WHERE unique_field = 'value1') AS 'exists'
UNION ALL 
SELECT 'value2' AS unique_field, EXISTS(SELECT 1 FROM your_table WHERE unique_field = 'value2') AS 'exists'