【问题标题】:SQL join, get data from one tableSQL join,从一张表中获取数据
【发布时间】:2018-01-20 19:34:38
【问题描述】:

我有一个关于联接的问题。如何获取具有指定名称的所有客户订单。

在我的结果中,我只想要“订单”表中的所有列和“客户”表中的零列。在这里你可以看到表格: https://www.w3schools.com/sql/sql_join.asp

SELECT *
FROM Orders
LEFT JOIN Customers
ON Orders.CustomerID=Customers.CustomerID
WHERE CustomerName = "Wilman Kala"

我在这里测试过: https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_join 它返回两个表中的所有列。

提前感谢您的帮助。

【问题讨论】:

    标签: sql sqlite select join


    【解决方案1】:

    * 之前添加表名。

    SELECT orders.*
    FROM Orders
    LEFT JOIN Customers ON Orders.CustomerID=Customers.CustomerID
    WHERE CustomerName = "Wilman Kala"
    

    或者更好地命名您要选择的每一列

    select orders.col1, orders.col2, ...
    

    顺便说一句,w3schools 是一个糟糕的教程网站。

    【讨论】:

      【解决方案2】:

      试试:

      SELECT O.*
      FROM Orders O
      LEFT JOIN Customers C ON O.CustomerID=C.CustomerID
      WHERE C.CustomerName = 'Wilman Kala'
      

      【讨论】:

      • 谢谢,很遗憾,我必须获得少量积分才能投票
      【解决方案3】:

      如果您只想要来自Orders 的列,您可以考虑INEXISTS

      SELECT o.*
      FROM Orders o
      WHERE EXISTS (SELECT 1
                    FROM Customers c
                    WHERE o.CustomerID = c.CustomerID AND
                          c.CustomerName = 'Wilman Kala'
                   );
      

      这与JOIN 版本略有不同。如果两个客户的名字相同,这将只返回每个订单一次。在带有JOIN的版本中,如果名称重复,订单将重复。

      通常,非重复行为是您想要的。

      【讨论】:

      • 为什么不... WHERE CustomerID IN (SELECT CustomerID ...)
      • @CL。 . . .你可以这样做。因为NOT EXISTS 在语义上优于NOT IN(它们处理NULLs 的方式不同),所以我倾向于坚持使用EXISTS 而不是IN
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-17
      相关资源
      最近更新 更多