简体   繁体   English

Inner join 允许重复吗?

[英]Will Inner join allow duplicates?

if join two tables using inner join method will it return duplicate values?如果使用 inner join 方法连接两个表,它会返回重复值吗?

Here is an example with duplicate rows in both tables.这是两个表中都有重复行的示例。

select * from customers;
 id |    name     | age |  address
----+-------------+-----+-----------
  1 | Ramesh      |  32 | Ahmedabad
  2 | Khilan      |  25 | Delhi
  3 | kaushik     |  23 | Kota          <-- id 3 "kaushik"
  3 | kaushik_two |  23 | Ahmedabad     <-- appears twice
  4 | Chaitali    |  25 | Mumbai
  5 | Hardik      |  27 | Bhopal
  6 | Komal       |  22 | MP
  7 | Muffy       |  24 | Indore
(8 rows)


select * from orders;
 oid |        date         | customer_id | amount
-----+---------------------+-------------+--------
 102 | 2009-10-08 00:00:00 |           3 |   3000    <-- reference to customer 3 
 100 | 2009-10-08 00:00:00 |           3 |   1500    <-- also appears twice
 101 | 2009-11-20 00:00:00 |           2 |   1560
 103 | 2008-05-20 00:00:00 |           4 |   2060
 104 | 2022-01-01 00:00:00 |         100 |   3900
(5 rows)

Inner Join内部联接

Produces duplicated rows for "kaushik" and "kaushik_two".为“kaushik”和“kaushik_two”生成重复的行。

select id, name, amount, date 
from customers 
inner join orders on customers.id = orders.customer_id;

 id |    name     | amount |        date
----+-------------+--------+---------------------
  2 | Khilan      |   1560 | 2009-11-20 00:00:00
  3 | kaushik     |   1500 | 2009-10-08 00:00:00  <-- first pair
  3 | kaushik     |   3000 | 2009-10-08 00:00:00
  3 | kaushik_two |   1500 | 2009-10-08 00:00:00  <-- second pair
  3 | kaushik_two |   3000 | 2009-10-08 00:00:00
  4 | Chaitali    |   2060 | 2008-05-20 00:00:00
(6 rows)

Yes, if there are duplicate values. 是的,如果有重复值。

If you have CUSTOMERS table: 如果您有CUSTOMERS表:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

and ORDERS table as follows: 和ORDERS表如下:

+-----+---------------------+-------------+--------+
| OID | DATE                | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   3000 |
| 100 | 2009-10-08 00:00:00 |           3 |   1500 |
| 101 | 2009-11-20 00:00:00 |           2 |   1560 |
| 103 | 2008-05-20 00:00:00 |           4 |   2060 |
+-----+---------------------+-------------+--------+

Then inner join will give result: 然后内部联接将产生结果:

SELECT  ID, NAME, AMOUNT, DATE
     FROM CUSTOMERS
     INNER JOIN ORDERS
     ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

This would produce the following result: 这将产生以下结果:

+----+----------+--------+---------------------+
| ID | NAME     | AMOUNT | DATE                |
+----+----------+--------+---------------------+
|  3 | kaushik  |   3000 | 2009-10-08 00:00:00 |
|  3 | kaushik  |   1500 | 2009-10-08 00:00:00 |
|  2 | Khilan   |   1560 | 2009-11-20 00:00:00 |
|  4 | Chaitali |   2060 | 2008-05-20 00:00:00 |
+----+----------+--------+---------------------+

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM