如何在此 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 和子查询 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章