什么是选择“X”?
Posted
技术标签:
【中文标题】什么是选择“X”?【英文标题】:What is Select 'X'? 【发布时间】:2011-10-02 03:13:36 【问题描述】: sSQL.Append(" SELECT 'X' ");
sSQL.Append(" FROM ProfileInsurancePlanYear ");
sSQL.Append(" WHERE ProfileID = " + profileid.ToString() + " AND CropYear = " + cropyear.ToString());
这是一个最初访问后端的查询。我已将其移至 SQLCE,并且对这个查询应该做什么感到困惑。
它命中的表结构是:
ProfileID
InsurancePlanID
CropYear
INsurance_Price
Levels_XML
我假设这会从 Levels_XML 列中选择 profileid 和cropyear 匹配的内容?
这甚至可以在 sqlCE 中使用吗?
【问题讨论】:
【参考方案1】:这种类型的查询通常用于查看是否存在行。如果找到一行,则查询将返回单个字符 X。否则,它将是一个空结果集...您也可以说
sSQL.Append(" SELECT count(*) ");
sSQL.Append(" FROM ProfileInsurancePlanYear ");
sSQL.Append(" WHERE ProfileID = " + profileid.ToString() +
" AND CropYear = " + cropyear.ToString());
这将返回 0 或某个正数的结果。不同的方法都要求数据库简单地指示是否存在任何符合条件的记录。
【讨论】:
COUNT 可能很昂贵,而且是一个糟糕的例子。SELECT 1 WHERE EXISTS (..query here..)
会更好,并检查 0 或 1 行
为了完全迂腐,gbn 的查询将返回一个空结果集,如果没有行满足“在这里查询”查询,如果有一行或多行满足询问。 SQL Server 足够聪明,一旦找到符合条件的行就会停止,不需要具体化整个内部查询。
我不推荐 COUNT(*),我同意它不是最好的,但我认为解释 SELECT 'X' 所取得的效果会更清楚一些。
如果记录存在,选择“x”就是选择一个静态字符串“x”。选择COUNT
,使用函数,代价更高。
这会带来什么优化吗?如果是这样,如何?【参考方案2】:
通常,Select 'X' 与 EXISTS 一起使用,因为 EXISTS 谓词不关心行中的值,而只关心这些行是否存在。
例如:-
Q.查找至少有一个人向他们汇报的员工。
SELECT last_name, employee_id FROM employee outer WHERE
EXISTS (SELECT 'X' FROM employee manager_id=outer.employee_id)
【讨论】:
以上是关于什么是选择“X”?的主要内容,如果未能解决你的问题,请参考以下文章