PostgreSQL SELECT JOIN

时间:2017-10-09 17:43:28

标签: sql postgresql

我为练习做出正确的选择时遇到了问题:

我创建了两个表: 1.客户 2.订单

广告。 1

CREATE TABLE public."Customer"
(
 id integer NOT NULL DEFAULT nextval('"Customer_id_seq"'::regclass),
  name text NOT NULL,
  surname text NOT NULL,
  address text NOT NULL,
  email text NOT NULL,
  password text NOT NULL,
  CONSTRAINT "Customer_pkey" PRIMARY KEY (id),
  CONSTRAINT "Customer_email_key" UNIQUE (email)
)

ad.2

CREATE TABLE public."Order"
(
  id integer NOT NULL DEFAULT nextval('"Order_id_seq"'::regclass),
  customer_id integer NOT NULL,
  item_list text,
  order_date date,
  execution_date date,
  done boolean DEFAULT false,
  confirm boolean DEFAULT false,
  paid boolean DEFAULT false,
  CONSTRAINT "Order_pkey" PRIMARY KEY (id),
  CONSTRAINT "Order_customer_id_fkey" FOREIGN KEY (customer_id)
      REFERENCES public."Customer" (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)

请不要介意如何设置列属性。

我遇到的问题是:

  

如何制作一个SELECT查询,该查询将为我提供一个结果,即在2017-09-15'之后订购了某些内容的客户的电子邮件和电子邮件。

我认为这应该与JOIN一起使用,但我尝试过的查询都没有:/。

谢谢!

2 个答案:

答案 0 :(得分:0)

您应该发布您尝试过的查询,但在此期间请尝试此操作。这是一个简单的联接:

SELECT DISTINCT id
    , email
FROM public."Customer" c
JOIN public."Order" o 
    ON c.id = o.customer_id
WHERE order_date > '2017-09-15'

答案 1 :(得分:0)

在表格#34;订单"您只需要为客户ID添加当前约束:

customer_id integer REFERENCES Customer (id)

有关更多信息,请查看此页面: https://www.postgresql.org/docs/9.2/static/ddl-constraints.html

所以,查询应该是这样的:

SELECT id, email
FROM Customer 
INNER JOIN Order 
    ON (Order.customer_id = Customer.id)
WHERE order_date >= '2017-09-15'

此外,您可以查看有用的文档:https://www.postgresql.org/docs/current/static/tutorial-join.html