【问题标题】:Inner join, sql confused内连接,sql混淆
【发布时间】:2019-05-19 10:00:41
【问题描述】:

这是我班级的挑战。 使用 INNER JOIN 检索以下信息:

  1. 使用客户和订单表查找公司所有者创建的所有订单。

我想出了这个,但是当我输入它时它说空集>>>

SELECT id FROM orders INNER JOIN customers USING (id);

这些是客户表中的列。 客户

 | id   | company | last_name | first_name  | email_address | job_title       
 | business_phone  | home_phone | mobile_phone | fax_number | address 
 | city | state_province  |  zip_postal_code |  country_region  | web_page    
 | notes | attachments |.

这些是订单表中的列。 订单

| id  | employee_id | customer_id | order_date | shipped_date | shipper_id           
| ship_name | ship_address | ship_city | ship_state_province  
| ship_zip_postal_code  | ship_country_region  | shipping_fee | taxes                
| payment_type | paid_date | notes | tax_rate | tax_status_id | status_id

【问题讨论】:

标签: mysql


【解决方案1】:

您可以找到内连接语法here 的示例。以下是如何执行此操作的一个示例:

select o.* 
from orders o
inner join customers c on o.customer_id = c.id
/* not sure how "owner of company" is represented in the data, but I'm assuming it's some value for job_title */
where c.job_title = 'owner' 

【讨论】:

  • o 和 c 指的是什么?
  • 它们是表别名。它只是使在连接条件中引用表变得更容易,因此您无需输入orders.customer_id = customers.id
  • @ryanc 是的,但并非只是为此
  • @Strawberry 是的,在我的示例中,我的“正义”只是指他们的目的的限制。我认为在这个阶段学习描述多次加入同一个表或其他类似目的对这个用户没有帮助。
【解决方案2】:

当你写作时:

SELECT id FROM orders INNER JOIN customers USING (id);

您要求:

SELECT o.ID              -- or c.ID
  FROM Orders AS o
  JOIN Customers AS c
    ON O.ID = C.ID;

您问的是“哪些客户的 ID 与订单 ID 相同?”,这可能不是您的意思。

很可能,您想使用以下变体:

SELECT o.ID AS Order_ID, c.ID AS Customer_ID
  FROM Orders AS o
  JOIN Customers AS c
    ON O.Customer_ID = C.ID;

您可以选择您在选择列表中获得的信息。

【讨论】:

    猜你喜欢
    • 2015-04-16
    • 2014-05-10
    • 2015-02-09
    • 2010-09-30
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多