Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 关键字';左';_Sql_Database_Sql Server 2008 - Fatal编程技术网

Sql 关键字';左';

Sql 关键字';左';,sql,database,sql-server-2008,Sql,Database,Sql Server 2008,追根究底想弄明白这一点,谷歌搜索只会导致更复杂的例子 我连接了两张桌子,它们连接得很好。教授要求我们列出orders表中发货日期为空的行,或者用练习中的话“尚未发货的订单” Join工作正常,直到我添加IS NULL行,然后我得到错误: Msg 156,第15级,状态1,第13行 关键字“LEFT”附近的语法不正确。 我用了20种不同的方式写了这篇文章,花了一下午的时间在谷歌上搜索,但还是无法消除错误。我知道这很简单,但是 SELECT customers.customer_id,

追根究底想弄明白这一点,谷歌搜索只会导致更复杂的例子

我连接了两张桌子,它们连接得很好。教授要求我们列出orders表中发货日期为空的行,或者用练习中的话“尚未发货的订单”

Join工作正常,直到我添加IS NULL行,然后我得到错误: Msg 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

LEFT JOIN
应位于
WHERE
子句之前

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
有关联接的其他信息,请参见


对于如何组合查询,有一个已定义的顺序

select
from
join
where
group by
having
order by

您不能混合该顺序。

为了澄清左连接,“左”端的每个记录(来自源),而不考虑右端的匹配(连接到)

所以,如果你想交换,比如,给我所有的客户,不管有没有订单存档,你会这样做

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
将显示所有客户,如果存在订单,也将显示该日期

您要查找的只是一个列表,其中列出了所有尚未发货的订单以及该订单是针对谁的。这将是一个站立的内部连接,因为你希望双方都存在匹配

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\u Date为空