0
###user_name      mobile     product_type###
aaa 12345   1

aaa 12345   2

bbb 56789   2

ccc 23456   2

bbb 56789   1

ccc 23456   1

ddd 11111   1

eee 22222   2

上記の形式の私の db.table .....ここで、2 は 1 の複製を表します (モバイルと名前の両方が一意です)。元の product_type 1 が必要です....##eee 22222 2## のレコードが必要です..product_type 1 がないことに気付いた場合..ご理解いただければ幸いです...試してみました

SELECT * FROM `applications` a where a.product_type=2 and user_name in (select user_name from `partners_applications` where user_name=a.user_name) order by a.user_name

私はこれが間違っていることを知っています.皆さん、私が解決するのを手伝ってくれませんか...

4

3 に答える 3

0

これを試すことができますか:

SELECT *
  FROM (SELECT *, count(*) AS counter
          FROM applications
        GROUP BY user_name, mobile) aView
 WHERE product_type = 2 AND counter = 1;
于 2013-02-14T17:02:34.743 に答える
0

これを探していると思います

     SELECT * FROM `applications` a 
     INNER JOIN `partners_applications` pa ON pa.user_name=a.user_name 
     WHERE a.product_type=2 
     GROUP BY a.user_name
     ORDER BY a.user_name

編集

あなたのタイプミスが原因で、私の更新された回答がここにありました

   SELECT * FROM `partners_applications` a 
   where a.product_type=2 
   and a.user_name not in (select user_name from partners_applications
                    where product_type = 1)
   group by a.user_name
   order by a.user_name

SQLデモはこちら

EDIT2。

異なる電話番号のuser_nameがある場合は、これを試すことができます

   SELECT * FROM `partners_applications` a 
   where a.product_type=2 
   and a.user_name not in (select user_name from partners_applications
                    where product_type = 1)

   order by a.user_name ;

デモ SQL フィドル

于 2013-02-14T17:02:42.867 に答える
0

これが正しいかどうか見てみましょう。2 に等しい商品タイプが 1 つしかない user_name|mobile ペアをすべて表示したいとします (そうしないと、 username が表示されますdddよね?)。

これは、それを行うクエリです。

select user_name, mobile, max(product_type) product_type
from table1
group by user_name, mobile
having count(distinct product_type) = 1 and sum(product_type = 2) = 1

ここでデモ。

注: 結果に製品タイプも表示する必要があることに気付きました。ただし、初期条件は結果に product_type = 2 レコードしかないことであるため、これは不要なはずです。とにかく、max不要でコストのかかるジョインやサブクエリを避ける機能を追加しました。

于 2013-02-14T17:21:11.497 に答える