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

时间:2017-12-14 18:27:23

标签: sql database select

所以我有两个表,我试图从两个表中显示一些数据并删除重复项。对不起,我是SQL和数据库的新手。这是我的代码

表1

                selectelem = document.getElementById("form:selectid");
                inputelem = document.getElementById("form:inputid");
                if (condition) {
                        selectelem.disabled = false;
                        inputelem.disabled = true;
                    } else {
                        inputelem.disabled = false;
                        selectelem.disabled = true;
                    }

表2

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

我想显示SHOP表中的所有内容,以及来自CUSTOMER TABLE的customer_id,customer_name。

到目前为止我已经尝试过了,但它显示了两个表中的所有内容,我得到了两个重复的customer_id列:

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

任何人都可以提供帮助吗?

由于

3 个答案:

答案 0 :(得分:1)

由于这两个表都有列customer_id,因此您可以在shop table上显示所有内容,并且只显示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;

答案 1 :(得分:0)

select distinct c.customer_id, c.customer_name, s.*
from customer c
inner join shop s on c.customer_id = s.customer_id

答案 2 :(得分:0)

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

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

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

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