子查询'in'操作数应包含1列

时间:2017-06-16 09:56:04

标签: mysql sql

我正在尝试通过计算他们在朋友的表中的出现次数来检索我拥有1个以上朋友的客户的姓名。那个只显示friend_id和cust_id以及location_id的朋友表,我还要提到我有一个位置表,其中包含有关位置的所有详细信息。但不幸的是,我在顶部提到了操作数问题; 有人可以向我解释清楚我要做什么,为什么我的查询错了。我看过类似的东西仍然没有得到它背后的逻辑。请不要参考另一个答案,如果您认为这个问题太基础,请不要发表评论;

select* from customer 
where custid in (select custid, count(custid) as occ from friend group by 
custid having occ >=2);

2 个答案:

答案 0 :(得分:0)

如错误消息中所述,子查询在Select列表

中只能有一列

使用COUNT子句中的Having聚合而不是别名,并从count(custid)

中删除select
SELECT *
FROM   customer
WHERE  custid IN (SELECT custid
                  FROM   friend
                  GROUP  BY custid
                  HAVING Count(custid) >= 2); 

最好使用JOIN代替IN,但对Mysql

中的效果不太确定
SELECT C.*
FROM   customer C
       JOIN (SELECT custid,
                    Count(custid) AS occ
             FROM   friend
             GROUP  BY custid
             HAVING occ >= 2) F
         ON C.custid = F.custid; 

答案 1 :(得分:0)

使用IN子句时,错误在内部查询中有多个列。

如果没有IN子句,可以做得更好,如下所示。

SELECT cust_name, cust_surname
  FROM (SELECT   cust_name, cust_surname, COUNT (*)
            FROM customer x JOIN friend y ON (x.cust_id = y.cust_id)
        GROUP BY cust_name, cust_surname
          HAVING COUNT (*) > 1);