【问题标题】:SQL sub-select returns 2 columns - expected 1SQL 子选择返回 2 列 - 预期为 1
【发布时间】:2018-03-29 13:32:24
【问题描述】:
sqlite> SELECT *
   ...> FROM Studio
   ...> WHERE third_party_id NOT IN (
   ...> SELECT third_party_id,effeciency_rating
   ...> FROM Staff
   ...> WHERE Staff.third_party_id = Studio.third_party_id AND
   ...> Staff.effeciency_rating < 0.7
   ...> );

带有错误信息

子选择返回 2 列 - 预期为 1

所以我知道为什么会发生这种情况,我的 subselct 有 thirdpartyid 和效率等级,而我只从 Studio 中选择 thirdpartyid。

所以我的关系:Stuido 雇用员工 所以现在我想选择所有没有雇佣效率等级低于 0.7 的员工的工作室。

所以我的问题是我如何根据效率等级选择我的员工并回馈我的工作室?

【问题讨论】:

  • 删除effeciency_rating 其中NOT IN 选择子查询
  • 您应该始终指定要返回的列,而不是使用*
  • 这不是一个论坛,而是一个问答网站。请阅读tour 了解其工作原理。

标签: sql sqlite


【解决方案1】:

你会这样做:

SELECT st.*
FROM Studio st
WHERE st.third_party_id NOT IN (SELECT s.third_party_id
                                FROM Staff s
                                WHERE s.third_party_id = st.third_party_id AND s.effeciency_rating < 0.7
                               );

请注意,我引入了表别名并限定了所有列名,因此查询是明确的。但是,正如所写的那样,查询并没有真正的意义。我怀疑你想要NOT EXISTS

SELECT st.*
FROM Studio st
WHERE NOT EXISTS (SELECT s.third_party_id
                  FROM Staff s
                  WHERE s.third_party_id = st.third_party_id AND s.effeciency_rating < 0.7
                 );

无论如何,我推荐NOT EXISTS 而不是NOT IN,因为它更明智地处理NULL 值。

【讨论】:

    【解决方案2】:

    您的内部查询定义了 2 列

    third_party_id,effeciency_rating

    从内部选择中删除 effeciency_rating 列。

    See example and tutorial

    【讨论】:

      【解决方案3】:

      变化:

      ...> SELECT third_party_id,effeciency_rating
      

      收件人:

      ...> SELECT third_party_id
      

      【讨论】:

      • 附带说明,我相信你拼错了效率 :)
      猜你喜欢
      • 2020-11-04
      • 1970-01-01
      • 2021-07-07
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      相关资源
      最近更新 更多