我的问题是关于表中是否有记录。如果我正在寻找des或不存在记录,我如何才能得到一个真正通知的结果列表?我的意思是,我知道我可以通过这样的查询来检查
SELECT field FROM table WHERE unique_field IN (value1, value2)这将向我展示那些确实存在的记录。但如果我想要的结果是:
+--------------+-------+
| unique_field | exists|
+--------------+-------+
| value1 | 1 |
| value2 | 0 |
+--------------+-------+是否可以这样做呢?
发布于 2013-12-13 16:10:50
使用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'发布于 2013-12-13 16:14:46
您还可以使用值的“引用”表来完成此操作:
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中的字段是唯一的(否则,您可能会得到重复的行或需要聚合)。
发布于 2013-12-13 16:05:11
检查count(*)以获取记录的no,如果它是returns 0,则不存在记录。
在桌子上。
SELECT count(*) FROM table WHERE unique_field IN (value1, value2);https://stackoverflow.com/questions/20570711
复制相似问题