0

特定の製造業者にどの顧客が何を注文したかを確認したい。

これらのテーブルがあります(列あり):

  • アイテム (item_num、order_num、stock_num、manu_code、quantity など)
  • 在庫 (stock_num, manu_code , description , unit_price など)
  • 注文 ( order_num、 order_date 、customer_num、 ship_instruct など)
  • 顧客 ( customer_num、 fname 、 lname 、 company 、 address1 など)

これは今の私のクエリですが、何らかのクロス積を返していると思います:

SELECT concat(c.fname," ", c.lname) AS fullname, s.description
FROM items i, stock s, customer c JOIN orders o 
ON o.customer_num=c.customer_num 
WHERE o.order_num=i.order_num AND i.manu_code = 'ANZ';

多くの重複する全体を含む大きなリスト (1000 行) を返します。

Anthony Higgens | baseball gloves
Anthony Higgens | baseball gloves
       .                 .
       .                 .
       .                 .
Kim Satifer     | running shoes

私は何を間違っていますか?

4

4 に答える 4

1

FROM items i, stock s, customer c関係するこれら3つのテーブルのデカルト結合を実行しますWHEREが、そのデカルト結合に対する制限はほとんどありません。

より明示的な結合を行うと、重複を大幅に削減し、実行しようとしていることをより適切に表現できます。INNER JOINSの後にすべてのテーブルをリストするだけでなく、正しい結合基準を使用しますFROM。例:(このような基準は他にもあります。JOINSに適用する必要がありますが、これは1つの例です) INNER JOIN stock ON stack.manu_code = items.manu_code:。

最後に、SELECT DISTINCTまたはを使用GROUP BYして重複をさらに減らすことができます。ただし、JOIN基準を使用して明示的なJOINを正しく取得する場合は、重複が多すぎないようにする必要があります。

于 2013-01-21T18:29:02.493 に答える
0

これを試して:

SELECT DISTINCT concat(c.fname," ", c.lname) AS fullname, s.description
FROM customer c 
INNER JOIN orders o ON c.customer_num = o.customer_num
INNER JOIN items i ON o.order_num = i.order_num
INNER JOIN stock s on s.stock_num = i.stock_num
WHERE i.manu_code = 'ANZ'
于 2013-01-21T18:32:15.090 に答える
0

これはうまくいくはずです:

        SELECT concat(a.fname, " ", a.lname ) を名前として
                        , d.description as desc
        お客様から
        内部結合命令 b
            a.customer_num = b.customer_num で
        インナージョインアイテム c
            on b.order_num = c.order_num
        インナージョインストック d
            c.manu_code = d.manu_code で
        「ANZ」のような c.manu_code
        名前、説明でグループ化

于 2013-01-22T06:38:31.817 に答える
0

みんなありがとう、私はこれが今働いていると思います:

SELECT DISTINCT concat(c.fname," ", c.lname) AS fullname, s.description
FROM customer c 
INNER JOIN orders o ON c.customer_num = o.customer_num
INNER JOIN items i ON o.order_num = i.order_num
INNER JOIN stock s on s.stock_num = i.stock_num
WHERE i.manu_code = 'ANZ';
于 2013-01-22T16:59:36.383 に答える