【问题标题】:Selecting using subqueries使用子查询进行选择
【发布时间】:2016-02-05 06:53:17
【问题描述】:

考虑下表架构: company(company-name, city 。假设这些公司可能位于几个城市。查找所有公司 位于“X公司”所在的每个城市。

这是否是正确的 SQL 代码:

 select company name from company
 where city in (select city from company where company-name = 'Company X')

这是否与:

   select s.company-name
   from company s
   where not exists
   ((select city from company where company-name = 'Small Bank
   Corporation')
   except
  (select city from company t where s.company-name = t.company-name))

【问题讨论】:

  • 您可以尝试自己执行查询,看看结果是否正确,它可能不会杀死您。
  • 子查询是需求的一部分吗?
  • 公司是否必须在Company X 所在的每个城市?还是随便一个城市?

标签: mysql sql


【解决方案1】:

使用连接可能会更好

SELECT DISTINCT c1.company_name
FROM company AS c1
JOIN company AS c2 ON c1.city = c2.city
WHERE c2.company_name = 'Company X'

【讨论】:

    【解决方案2】:

    如果您的字段名为“公司名称”,则查询应为

    select "company-name" 
    from company 
    where city in (select city from company where "company-name" = 'Company X')
    

    如果公司名称知道它是唯一的,您可以将“in”运算符替换为“=”

    【讨论】:

    • 双引号用于字符串,而不是列名。在 MySQL 中,您在包含特殊字符的列名周围使用反引号。
    • 我只是在我的数据库中尝试了select * FROM myTable WHERE "username" = 'barmar',但没有找到该行。
    • sqlfiddle.com/#!9/c2c3c/1。只有第二个查询成功。也许有一个 SQL 模式设置可以改变这一点,以匹配 ANSI SQL。
    • 取决于ANSI_QUOTES SQL模式。
    猜你喜欢
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多