繁体   English   中英

SQL-从两个表中选择数据并删除重复项

[英]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

您需要手动列出所需的列。 使用*将从每个表中提取每一列。 SQL没有任何方式说“选择除这些之外的所有列...”。

我希望您只是随便使用* -在程序代码中使用SELECT * ,然后期望某些列以特定顺序或特定名称存在是一个非常糟糕的主意。

要保存输入,您可以对其中一个表使用*并手动命名其余表:

SELECT
    customer.*,
    shop.shop_id,
    shop.shop_address
FROM
    ...

暂无
暂无

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

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