2017-06-16 21 views
0

友人のテーブルに出現した人の数をカウントして、1人以上の友人がいる顧客の名前と姓を取得しようとしています。 friend_idとcust_idとlocation_idだけを表示するその友人テーブル、私は場所に関するすべての詳細を持つ場所テーブルを持っていることに言及する必要があります。残念ながら私はトップに記載されたオペランドの問題を持っています。 誰かが私に何をしなければならないか、なぜ私の質問が間違っているのか、私に説明してもらえますか?私は似たようなものを見てきましたが、その背後に論理がありません。あなたがこの質問があまりにも基本的だと思うなら、別の答えを参照しないでください。エラーメッセージで述べたようサブクエリ 'in'オペランドには1列が含まれている必要があります

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

答えて

0

、サブクエリが

Having句の代わりにエイリアス名でCOUNT骨材を使用し、select

SELECT * 
FROM customer 
WHERE custid IN (SELECT custid 
        FROM friend 
        GROUP BY custid 
        HAVING Count(custid) >= 2); 
から count(custid)を除去 Selectリストに1つの列だけを持つことができ

INの代わりにJOINを使用すると便利ですが、パフォーマンスについてはあまりよく分かりません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; 
+0

ありがとうございますが、すべての顧客を返すこと。私のテーブルはかなり小さいです。 1人の顧客が条件に一致すると見ます – Shyryu

+0

@Shyryu - サンプルデータと予想される結果を追加 –

+0

私の悪いですが、同じ場所に3人の友人がいて、友人テーブルにはっきりと見えます。私はその顧客の名前を探しています。しかし、友人のテーブルは私にlocation_id /を与えるだけで、場所テーブルは私にそのエリアの名前を教えてくれます。 – Shyryu

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); 
関連する問題