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

时间:2018-03-29 13:32:25

标签: sql sqlite

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有第三方和效率评级,而我只选择Studio的第三方。

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

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

3 个答案:

答案 0 :(得分: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值。

答案 1 :(得分:0)

变化:

...> SELECT third_party_id,effeciency_rating

要:

...> SELECT third_party_id

答案 2 :(得分:0)

您的内部查询已定义了2列

<强> third_party_id,effeciency_rating

从内部选择中删除effeciency_rating列。

See example and tutorial