2010-12-03 60 views
1

我得到了关于MySQL以下问题MYSQL:看到唯一的行结果时,一些字段没有填写

首先,我会告诉我的数据库,然后我想要什么,然后我做了什么,并没有工作

我下表得到

DB:customeradress

+-------------------+-------------------+-------------------+---------------+---------------+ 
|customeradress_id | customername_id | customeradres | customerZip | customerplace | 
+-------------------+-------------------+-------------------+---------------+---------------+ 
+-------------------+-------------------+-------------------+---------------+---------------+ 
|01  | 01 | streetA 1 | 1234AB | PlaceA | 
+-------------------+-------------------+-------------------+---------------+---------------+ 
|02  | 04 | streetZ 99 | 9901ZZ | PlaceZ | 
+-------------------+-------------------+-------------------+---------------+---------------+ 
|03  | 99 | streetXY 11 |  | PlaceB | 
+-------------------+-------------------+-------------------+---------------+---------------+ 
|04  | 01 | streetA 1 |  | PlaceA | 
+-------------------+-------------------+-------------------+---------------+---------------+ 
|05  | 01 | streetA 1 | 1234AB | PlaceA | 
+-------------------+-------------------+-------------------+---------------+---------------+ 

我想要什么:

我想对数据库做一个查询,它给了我唯一的记录,当有多个记录1有一个customerZip,一个没有, 然后返回一个与customerZip填充。结果应该是这样的:

+-----------------------+ 
|customeradress_id | 
+-----------------------+ 
+-----------------------+ 
|01  | 
+-----------------------+ 
|02  | 
+-----------------------+ 
|03  | 
+-----------------------+ 

我所做的:

当我使用此查询:

MYSQL> SELECT DISTINCT customeradress_id FROM customeradress

MYSQL> SELECT customeradress_id FROM customeradress GROUP BY customeradress_id

我得到以下结果

+-----------------------+ 
|customeradress_id | 
+-----------------------+ 
+-----------------------+ 
|01  | 
+-----------------------+ 
|02  | 
+-----------------------+ 
|03  | 
+-----------------------+ 
|04  | 
+-----------------------+ 

有人可以帮助我吗?

+0

看起来像你忘了包含一些过滤条款? – ajreal 2010-12-03 08:47:49

+0

@ajreal,我想是的,但我该怎么做? – Megapool020 2010-12-03 08:57:31

+0

你需要指定你的过滤条件...没有你的具体要求,不能帮助 – ajreal 2010-12-03 08:58:49

回答

1

理由如下

  • 内选择获取的所有独特customernames。如果客户有邮编,MIN(或MAX)将检索一个邮政编码。
  • 与原表再次加入内选择删除其中一个客户有一个NULL邮政编码(如果另一个邮编可用)的行

SQL语句

SELECT DISTINCT customeradress_id 
FROM customeradress ca 
     INNER JOIN (
      SELECT customername_id 
        , customerZip = MIN(customerZip) 
      FROM customeradress 
      GROUP BY 
        customer_name_id 
     ) cag ON cag.customername_id = ca.customername_id 
       AND ISNULL(cag.customerZip, '') = ISNULL(ca.customerZip, '') 
0

首先,你要重复的客户地址是多个行中的customer_id &客户对的集合。然后,您想要查找与那些customer_id和customeradres对相匹配的所有行并过滤出空值。

尝试这种情况:

select ca.customeradress_id 
from 
    customeradress ca inner join 
    (select customer_id, customeradres 
    from customeradress 
    group by customer_id, customeradres 
    having count(*) > 1) t1 on t1.customer_id = ca.customer_id and t1.customeradres = ca.customeradres 
where 
    ca.customerZip is not null 

子选择基团上的customer_id和customeradres和having子句过滤器的行,只有那些与多于一个的出现时即重复。这组customer_id和customeradres是内部连接到同一个表,以便只返回匹配的行。 where子句然后过滤到只有那些用ZIP。

相关问题