在select语句中获取重复值

问题描述 投票:1回答:4

我创建了两个表customer和customer_address_details,如下所示。我有customer_id作为来自customer表的customer_address的外键。

Customer Table:
+-------------+---------------+--------------+
| CUSTOMER_ID | CUSTOMER_NAME | CUSTOMER_DOB |
+-------------+---------------+--------------+
|           1 | PHILLIP       | 1983-01-05   |
|           2 | ROBERT        | 1981-01-05   |
+-------------+---------------+--------------+

Customer_Address Table:
+------------+-------------------------+--------------+---------------+-----------------+-------------+
| ADDRESS_ID | ADDRESS_STREET          | ADDRESS_CITY | ADDRESS_STATE | ADDRESS_ZIPCODE | CUSTOMER_ID |
+------------+-------------------------+--------------+---------------+-----------------+-------------+
|          1 | 12345 mlk pkwy | san Antonio       | TEXAS         |           75025 |           1 |
|          2 | 12345 main st           | Austin        | TEXAS         |           75035 |           2 |
+------------+-------------------------+--------------+---------------+-----------------+-------------+

当我提供以下查询时,它显示重复的行。

从客户a,customer_address b中选择a.customer_name,b.address_street,其中a.customer_id = 1;

+---------------+-------------------------+
| customer_name | address_street          |
+---------------+-------------------------+
| PHILLIP       | 12345 mlk pkwy |
| PHILLIP       | 12345 main st          |
+---------------+-------------------------+

你能告诉我为什么它会给出重复的行,即使我要求为customer_id = 1选择地址吗?

这是我的表格描述

+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| CUSTOMER_ID   | int(11)     | NO   | PRI | NULL    |       |
| CUSTOMER_NAME | varchar(50) | YES  |     | NULL    |       |
| CUSTOMER_DOB  | date        | YES  |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+

+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| ADDRESS_ID      | int(11)     | NO   |     | NULL    |       |
| ADDRESS_STREET  | varchar(50) | YES  |     | NULL    |       |
| ADDRESS_CITY    | varchar(30) | YES  |     | NULL    |       |
| ADDRESS_STATE   | varchar(30) | YES  |     | NULL    |       |
| ADDRESS_ZIPCODE | int(11)     | YES  |     | NULL    |       |
| CUSTOMER_ID     | int(11)     | NO   | MUL | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
mysql sql
4个回答
4
投票

您需要一个条件来加入您的表格,因此您没有与每个客户匹配的每个地址。

就像是

select a.customer_name,b.address_street 
from customer a, customer_address b 
where a.customer_id=1 and a.customer_id=b.customer_id

要么

select a.customer_name,b.address_street 
from customer a inner join customer_address b 
 on a.customer_id=b.customer_id
where a.customer_id=1

1
投票

你应该加入表格:

select a.customer_name, b.address_street from customer a
inner join customer_address b 
on a.customer_id = b.customer_id
where a.customer_id = 1;

这将指示您要聚合表并从此新关系返回行。

资料来源:https://dev.mysql.com/doc/refman/5.7/en/join.html


0
投票

对于最佳实践,请使用此查询:(适用于时间复杂度)

select a.customer_name,b.address_street from customer a inner join customer_address b on a.customer_id=b.customer_id where a.customer_id=1

你也可以试试这样的东西:(当谈到时间复杂性时,不建议作为最佳实践)

select a.customer_name,b.address_street from customer a, customer_address b where a.customer_id=1 and a.customer_id=b.customer_id


0
投票

您需要加入表格。试试这个:

Select C.Customer_name, B.ADDRESS_STREET
 from Customer C
 join Customer_Address B on C.customer_id = B.Customer_id
 where C.Customer_id = 1
© www.soinside.com 2019 - 2024. All rights reserved.