我的问题是关于表中记录的存在。我怎么能得到一个结果列表,它真正通知我正在寻找des或不存在的记录? 我的意思是,我知道我可以检查像
这样的查询存在什么SELECT field FROM table WHERE unique_field IN (value1, value2)
这将向我展示那些实际存在的记录。但是,如果我想要一个结果如下:
+--------------+-------+
| unique_field | exists|
+--------------+-------+
| value1 | 1 |
| value2 | 0 |
+--------------+-------+
是否可以这样做?
答案 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'