如何构建跨多个表的查询?

时间:2012-11-01 08:13:16

标签: sql-server

以下是我的表格:

客户

Cust_ID (PK)
Name

订单

Order_ID (PK)
Cust_ID (FK)

ORDER_LINE

Order_ID (pk)
Part_ID (FK)

PART

Part_ID (PK)
Part_Description

现在,我想列出客户详细信息,部件号以及每个客户订购的部件的描述。

我该怎么做?

感谢。

4 个答案:

答案 0 :(得分:2)

您应该使用FK使用“JOIN”,但是从我看到的“ORDERS”和“ORDER_LINE”之间没有外键。你确定你没有错过表定义中的某些内容,即:ORDER_LINE应该将ORDER_ID作为FK吗? 希望这有帮助

答案 1 :(得分:1)

您可以尝试类似

的内容
SELECT  c.*,
        p.*
FROM    CUSTOMER c INNER JOIN
        ORDERS o    ON  c.Cust_ID = o.Cust_ID INNER JOIN
        ORDER_LINE ol   ON  o.Order_ID = ol.Order_Number INNER JOIN
        PART p ON   ol.Part_Number = p.Part_Number

看看

Join (SQL)

  

SQL连接子句组合了两个或多个表中的记录   数据库中。

SQL Joins

  

JOIN关键字在SQL语句中用于查询来自两个或的数据   更多表,基于这些中某些列之间的关系   表。

对于一些图形示例

JOIN Basics

答案 2 :(得分:1)

您需要的是一个简单直截了当的JOIN,如此:

SELECT 
  c.Cust_ID, 
  c.Name, 
  l.Part_Number, 
  l.Part_Description
FROM CUSTOMER c  
INNER JOIN ORDERS     o  ON c.Cust_ID      = o.Cust_ID
INNER JOIN ORDER_LINE ol ON o.OrdeR_ID     = ol.Order_Number
INNER JOIN PART       l  ON ol.Part_Number = l.Part_Number

答案 3 :(得分:1)

您想要一个SQL“join”,例如:

SELECT c.Name, ol.Part_Number, p.Part_Description
FROM Customer AS c
JOIN Orders AS o ON c.Cust_ID = o.Cust_ID
JOIN Order_Line AS ol ON o.Order_ID = ol.Order_Number
JOIN Part AS p ON ol.Part_Number = p.Part_Number

请注意,如果没有WHERE子句,此查询将返回所有客户的所有订单中的所有所有部分,这将真正打击网络并在除了小型数据库之外的任何其他方面表现不佳:

  

WHERE(c.Cust_ID = MyCustomerID)

MySQL加入语法
SQL Server 加入语法