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 演示在这里

编辑2。

好吧,如果你有不同电话号码的用户名,那么你可以试试这个

   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 的所有 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 回答