0

2 番目のテーブルの登録に基づいて、1 つのテーブルから選択しようとしています

4つのテーブルを使用しています

table Products
Product_Id     |  Product_Name    |   Product_Value   | Category_Id
1              |  Ball            |   10              | 1
2              |  Pen             |    2              | 2 
3              |  Eraser          |    1              | 1

table Categories
Category_Id    |  Category_Name
1              |  Acessories
2              |  Others

table Customers
Customer_Id    |  Customer_Name
1              |  John
2              |  Peter

table Sells
Sell_Id        |  Product_Id      |   Customer_Id   |  Sell_Date
1              |  1               |   1             |  2012-01-01
2              |  2               |   1             |  2012-01-02

だから私は顧客が何を買ったかを歴史的に示すために選択したい

お気に入り

ジョン・ヒストリック

Product Name  Category Name   Date
Ball          Accessories     2012-01-01
Pen           Others          2012-010

最後に、3つの異なるテーブルから情報を表示しています

INNER JOIN と LEFT JOIN を使用してみましたが、成功しませんでした。

助けてくれてありがとう。

4

5 に答える 5

5

分解してください。最初に必要なのは製品名です。

SELECT Product_Name FROM Products

カテゴリを取得するにはどうすればよいですか?参加してください!

SELECT Products.Product_Name, Categories.Category_Name 
FROM Products JOIN Categories ON Products.Category_Id = Categories.Category_Id

近づいて!注文履歴を持ち込む時間:

SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date 
FROM Products 
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id

これで、名前を取り込んで、John にフィルターをかけることができます。

SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date 
FROM Products 
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id
JOIN Customers ON Sells.Customer_Id = Customers.Customer_Id
WHERE Customers.Customer_Name = 'John'

心の中で一歩一歩進んでください。進むにつれて、各パーツからクエリを作成します。

あなたがそれについて言及したので...

LEFT JOIN不足しているデータを処理する方法です。「左」テーブルから行を返し、句NULLに一致するものがない場合は「右」テーブルのフィールドに入れます。ON

たとえば、John がカテゴリのない (Product.Category_IdだったNULL) 製品を購入した場合、 を使用してJOINもその購入のレコードは返されません。これは、 に一致するカテゴリがなかったためCategory_Id Nullです。その場合、LEFT JOIN Categories結果セットでもCategory_Name可能NULLです。

于 2012-11-21T04:22:53.587 に答える
2
SELECT
    Customers.Customer_Name as 'Customer Name',
    Products.Product_Name as 'Product Name',
    Categories.Category_Name as 'Category Name',
    Sells.Sell_Date as 'Date Sold'
FROM Customers
    INNER JOIN Sells on Sells.Customer_Id = Customers.Customer_Id
    INNER JOIN Products ON Products.Product_Id = Sells.Sell_Id
    INNER JOIN Categories ON Categories.Category_Id = Products.Category_ID;

1 人の人物の履歴を取得する場合は、WHERE 句を使用できます。

WHERE Customers.Customer_Id = 1

また...

WHERE Customers.Customer_Name = 'John'
于 2012-11-21T04:22:37.630 に答える
1

これらすべてのテーブルで JOIN を使用し、必要なものを選択するだけです。

SELECT 
    p.Product_Name, c.Category_Name, s.Sell_Date
FROM
    Customers cu JOIN Sells s ON cu.id = s.Customer_Id
    JOIN Products p ON p.id = s.Product_Id     
    JOIN Categories c ON p.Category_Id = c.id
WHERE
    cu.Customer_Name = "John"
于 2012-11-21T04:19:32.333 に答える
1

JOIN正しい:

SELECT Products.Product_Name, Categories.Category_Name, Sells.Sell_Date
FROM Sells JOIN Products ON Sells.Product_Id = Products.Product_Id JOIN Categories ON Sells.Category_Id = Categories.Category_Id
WHERE Sells.Customer_Id = 1;
于 2012-11-21T04:21:49.190 に答える
0
SELECT Product_Name, Category_Name, Sell_Date
FROM Products, Categories, Sells
WHERE Sells.Customer_Id = 1
    AND Sells.Product_Id = Products.Product_Id
    AND Products.Category_Id = Categories.Category_Id;
于 2012-11-21T04:22:07.613 に答える