如何在此 SELECT 语句中使用 EXISTS 和子查询 [关闭]

Posted

技术标签:

【中文标题】如何在此 SELECT 语句中使用 EXISTS 和子查询 [关闭]【英文标题】:How to use EXISTS and a subquery with this SELECT Statement [closed] 【发布时间】:2014-02-20 21:45:46 【问题描述】:
SELECT CountryCode, Name AS Country, Language
FROM Country INNER JOIN CountryLanguage
ON Country.Code = CountryLanguage.CountryCode
WHERE Language = 'German'
ORDER BY Country;

您将如何在此 SELECT 语句中使用 EXISTS 和子查询?

【问题讨论】:

什么数据库? SQL 只是一种查询语言 - 但是 mysql、Postgres、Oracle、SQL Server、DB2、Ingres 等各种数据库有很多细微的差别..... 如果这不是一个家庭作业问题'如何做到奇怪'我认为没有必要存在 是的,作业。 SQL Server 数据库。 【参考方案1】:

这应该产生相同的结果并使用 EXISTS:

select countrycode, name as country, language
  from country y
 where exists (select 'fish'
          from countrylanguage x
         where x.countrycode = y.code
           and x.language = 'German')
 order by country;

对于 EXISTS 子查询,如果子查询返回任何内容,则条件通过,如果不返回任何行,则失败,无论您在 select 语句中输入什么(注意我输入了“fish”)。但是,在任何情况下,该子查询仍将返回一行,其中该国家/地区在语言为德语的 countrylanguage 上有一行,因此对于适用于您的国家/地区行,条件通过,因此过滤方式相同。

【讨论】:

注意:你不需要'鱼'。您可以选择 1 或 *。 @wildpasser 我并没有试图欺骗他或任何东西,只是说明你在 select 语句中放什么并不重要。很多人使用 1 / * / 'x' 所以我想明确指出选择中列出的内容并不重要 对于初学者来说,这是令人困惑的,恕我直言。 (我倾向于使用 * ,因为我通常从不使用 * )也许 select ... where not exists (select 12345 from ...) 更清楚 12345 只是一个占位符【参考方案2】:

感谢所有提示。我能够用 EXISTS 和一个子查询将一个解决方案拼凑在一起,产生与我原来的 SELECT 语句相同的结果。

SELECT CountryCode, Name AS Country, Language
FROM CountryLanguage AS X INNER JOIN Country AS Y
ON X.CountryCode = Y.Code
WHERE EXISTS
    (
    SELECT 'German'
    FROM CountryLanguage AS X
    WHERE X.CountryCode = Y.Code
    AND X.Language = 'German'
    )
AND X.Language = 'German'
ORDER BY Country;

【讨论】:

以上是关于如何在此 SELECT 语句中使用 EXISTS 和子查询 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

vfp 中 SQL语句 exists

带有 Exists 的 WHERE CASE WHEN THEN 语句

sql 语句中in ,not in

使用EXISTS语句注意点

SQL Where exists case 语句

关于SQL语句中exists与not exists的问题