Mysql 在select语句中获取重复值

Mysql 在select语句中获取重复值,mysql,sql,Mysql,Sql,我创建了两个表customer和customer\u address\u details,如下所示。我将customer_id作为customer表中customer_地址的外键 Customer Table: +-------------+---------------+--------------+ | CUSTOMER_ID | CUSTOMER_NAME | CUSTOMER_DOB | +-------------+---------------+--------------+ |

我创建了两个表customer和customer\u address\u details,如下所示。我将customer_id作为customer表中customer_地址的外键

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、客户地址b中选择a.客户名称、b.地址、街道,其中a.客户id=1

+---------------+-------------------------+
| customer_name | address_street          |
+---------------+-------------------------+
| PHILLIP       | 12345 mlk pkwy |
| PHILLIP       | 12345 main st          |
+---------------+-------------------------+
您能告诉我,为什么即使我要求为客户选择地址,它也会给出重复的行吗

这是我的表格说明

+---------------+-------------+------+-----+---------+-------+
| 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    |       |
+-----------------+-------------+------+-----+---------+-------+

您需要一个条件来加入表,这样您就不会让每个地址都与每个客户匹配

差不多

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, 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;
这将表明您希望聚合表并从这个新关系返回行


来源:

您应该加入表格:

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 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

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

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

我更新了select语句,它运行良好。谢谢。从技术上讲,每个地址都与一位客户匹配:)@arabind,有几个很好的理由可以解释为什么您总是喜欢EdmCoff推荐的内部连接语法。广义地说,在使用现代join语句时,很难犯导致您提出这个问题的错误(我们称之为笛卡尔积,其中一个表中的行最终连接到另一个表中不相关的行),它更新了我的select语句,效果很好。谢谢。从技术上讲,每个地址都与一位客户匹配:)@arabind,有几个很好的理由可以解释为什么您总是喜欢EdmCoff推荐的内部连接语法。广义地说,在使用现代连接语法时,很难犯导致您提出这个问题的错误(我们称之为笛卡尔积,其中一个表中的行最终连接到另一个表中不相关的行)