什么是选择“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”?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery选择什么版本 1.x? 2.x? 3.x?

jQuery选择什么版本 1.x? 2.x? 3.x?

这个 SQL 选择结构叫啥?

为什么很多人都选择 OS X + Vim + IntelliJ IDEA?

jQuery选择什么版本 1.x? 2.x? 3.x?

为什么我会选择Vert.x与Kotlin