JOIN ON SQL语法

时间:2018-05-31 20:59:02

标签: sql inner-join

我正在学习我的第一个数据库类,需要一些关于我需要更改脚本来处理的信息。目前我有2个表,一个“订单”表和一个“客户”表,这就是它们的编码方式。

CREATE TABLE customers (
  customer_id           INT          ,
  customer_first_name   VARCHAR(20),
  customer_last_name    VARCHAR(20)     NOT NULL,
  customer_address      VARCHAR(50)    NOT NULL,
  customer_city         VARCHAR(20)     NOT NULL,
  customer_state        CHAR(2)         NOT NULL,
  customer_zip          CHAR(5)     NOT NULL,
  customer_phone        CHAR(10)     NOT NULL,
  customer_fax          CHAR(10),
  CONSTRAINT customers_pk 
    PRIMARY KEY (customer_id)
);

CREATE TABLE order (
  order_id          INT         NOT NULL,
  customer_id       INT         NOT NULL,
  order_date        DATE        NOT NULL,
  shipped_date      DATE,
  employee_id       INT,
  CONSTRAINT orders_pk
    PRIMARY KEY (order_id),
  CONSTRAINT orders_fk_customers
    FOREIGN KEY (customer_id) REFERENCES customers (customer_id),
  CONSTRAINT orders_fk_employees
    FOREIGN KEY (employee_id) REFERENCES employees (employee_id)
);

将这两个表连接在一起的脚本如下:

SELECT or.order_id, or.order_date, or.customer_city,
    cu.customer_first_name, cu.customer_last_name
  FROM orders or INNER JOIN customers cu
  ON or.customer_first_name = cu.customer_first_name
  AND or.customer_last_name = cu.customer_last_name;

现在显然,我知道这是不正确的,可能有多个错误,所以要温和。我很想知道我能做些什么才能让它发挥作用。请指教。

2 个答案:

答案 0 :(得分:4)

两件事:

  • 请勿使用namespace Illuminate\Contracts\Validation; interface Rule { /** * Determine if the validation rule passes. * * @param string $attribute * @param mixed $value * @return bool */ public function passes($attribute, $value); /** * Get the validation error message. * * @return string */ public function message(); } 作为别名。这是一个保留的词。

  • 通过外键加入。

查询应如下所示:

or

答案 1 :(得分:2)

您可以在ID号码上加入您的表格,并且您不必担心当多个人具有相同名称时会发生什么。

请改用:

FROM orders ord INNER JOIN customers cu
ON ord.order_id = cu.customer_id 

您的select语句可以保持原样。我也根据Error_2646的评论重新别名。

在可能的情况下,使用作为其中一个表中主键的字段也比使用非键字段更好。