6

これを理解しようとして私の尻尾を追いかけ、それをグーグルで検索すると、はるかに複雑な例につながります。

うまく結合する2つのテーブルを結合しました。教授は、出荷日がNULLである注文テーブルから、または演習の言葉で「まだ出荷されていない注文」の行をリストするように依頼しました。

IS NULL行を追加するまで結合は正常に機能し、エラーが発生します: メッセージ156、レベル15、状態1、行13キーワード「LEFT」の近くの構文が正しくありません。

私はこの20の異なる方法を書き、午後をグーグルで過ごしましたが、エラーを取り除くことはできません。シンプルなものになると思いますが...

SELECT
    customers.customer_id,
    customers.name,
    customers.phone,
    orders.order_id,
    orders.order_date,
    orders.shipped_date
FROM
    orders
WHERE
    orders.shipped_date IS NULL
LEFT OUTER JOIN customers ON customers.customer_id=orders.customer_id
4

3 に答える 3

20

クエリの作成方法には定義された順序があります

select
from
join
where
group by
having
order by

その順序を混在させることはできません。

于 2012-12-12T00:08:49.083 に答える
5

LEFT JOINWHERE条項の前に最初に来る必要があります。

SELECT  customers.customer_id,
        customers.name,
        customers.phone,
        orders.order_id,
        orders.order_date,
        orders.shipped_date
FROM    orders 
        LEFT OUTER JOIN customers 
            ON customers.customer_id=orders.customer_id
WHERE   orders.shipped_date IS NULL

結合の詳細については、を参照してください。

于 2012-12-12T00:06:55.717 に答える
0

LEFT JOINを明確にするために、右側(結合)の一致に関係なく、(ソースから)「LEFT」側のすべてのレコード

したがって、たとえばSWAPを行う場合、注文を登録しているかどうかに関係なく、すべての顧客に次のように指示します。

Select
      C.Customer_ID,
      C.Name,
      C.Phone,
      O.Order_Date
   from
      Customers C
         LEFT JOIN Orders O
            on C.Customer_ID = O.Customer_ID

すべての顧客が表示され、注文が存在する場合はその日付も表示されます。

あなたが探しているのは、出荷されていないすべての注文とその注文の対象者のリストです。両方の側に試合が存在することを期待しているので、これはスタンダーのINNERJOINになります。

Select
      C.Customer_ID,
      C.Name,
      C.Phone,
      O.Order_Date
   from 
      Orders O
         INNER JOIN Customers C
            on O.Customer_ID = C.Customer_ID
   where
      O.Shipped_Date IS NULL

したがって、この場合のWHERE句は、プライマリ「FROM」テーブルソース「Orders」(別名「O」)に明示的にあります。そして、出荷されていないものだけが必要なので、O.Shipped_DateだけがNULLであることに注意してください。

于 2012-12-12T00:13:03.253 に答える