![](/img/trans.png)
[英]SQL Joining two tables and removing the duplicates from the two tables but without loosing any duplicates from the tables itslef
[英]SQL - Selecting data from two tables and removing duplicates
因此,我有两个表,并且试图从这两个表中显示一些数据并删除重复项。 抱歉,我是SQL和数据库的新手。 这是我的代码
表格1
CREATE TABLE customer
(
customer_id VARCHAR2(5),
customer_name VARCHAR2(50) NOT NULL,
customer_address VARCHAR2(150) NOT NULL,
customer_phone VARCHAR2(11) NOT NULL,
PRIMARY KEY (customer_id)
);
表2
CREATE TABLE shop
(
shop_id VARCHAR2(7),
shop_address VARCHAR2(150) NOT NULL,
customer_id VARCHAR2(7),
PRIMARY KEY (shop_id),
FOREIGN KEY (customer_id) REFERENCES customer (customer_id)
);
我想显示SHOP表中的所有内容,以及CUSTOMER表中的customer_id和customer_name。
到目前为止,我已经尝试过了,但是它显示了两个表中的所有内容,并且我得到两个重复的customer_id列:
SELECT *
FROM shop
JOIN customer ON shop.customer_id = customer.customer_id
ORDER BY customer_name;
有人能帮忙吗?
谢谢
由于两个表都有column customer_id列,因此您可以显示shop表中的所有内容,而只显示customer表中的customer_name列
SELECT s.*, c.customer_name
FROM shop s
JOIN customer c ON s.customer_id = c.customer_id
ORDER BY c.customer_name;
select distinct c.customer_id, c.customer_name, s.*
from customer c
inner join shop s on c.customer_id = s.customer_id
distinct
关键字https://www.w3schools.com/sql/sql_distinct.asp 您需要手动列出所需的列。 使用*
将从每个表中提取每一列。 SQL没有任何方式说“选择除这些之外的所有列...”。
我希望您只是随便使用*
-在程序代码中使用SELECT *
,然后期望某些列以特定顺序或特定名称存在是一个非常糟糕的主意。
要保存输入,您可以对其中一个表使用*
并手动命名其余表:
SELECT
customer.*,
shop.shop_id,
shop.shop_address
FROM
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.