【问题标题】:How to query multiple non related tables?如何查询多个不相关的表?
【发布时间】:2014-02-08 14:13:52
【问题描述】:

基本上我有三个表,我想从所有三个表中选择属性。

SELECT Users.Name, Sales.SaleID, Return.ReturnAmount
FROM Users
INNER JOIN Sales ON Users.SaleID = Sales.SaleID

但是,Return 与 Sales 有关系,但与 Users 没有关系。

如何包含 returnAmount?

【问题讨论】:

  • 显示表格的布局,以及一些示例数据(通过编辑问题)。
  • JOIN 表很容易。只需添加JOIN Return ON 1=1。但是,如果该表不相关,您将如何确定应该显示哪些值?在最坏的情况下,您最终会得到一个笛卡尔积,返回 SalesUsers 表的所有行(具有有效 JOIN 的行数乘以 Return 表中的行数。
  • @SchmitzIT 但退货与销售有关,例如Sales.SaleID = Return.SaleID,但退货与用户无关
  • 我想知道为什么用户和销售之间的关系是SalesID ON Users.SaleID = Sales.SaleID 那么,一个销售有很多用户,每个用户都与一个销售相关?这看起来不正确的设计。
  • @user2525364 - 这是有道理的。所以你JOINReturn 使用这些标准来设置表。 JOIN 不需要连接所有表(那是不可能的),而是将与集合的一部分相关的信息串在一起。

标签: mysql sql select inner-join


【解决方案1】:

既然你说退货与销售有关系,应该可以。只需检查您需要加入退货与销售的列。

 SELECT Users.Name, Sales.SaleID, Return.ReturnAmount
 FROM Users
 INNER JOIN Sales 
   ON Users.SaleID = Sales.SaleID
 INNER JOIN Return
   ON Return.SaleID = Sales.SaleID -- You said Return has relationship with Sales. 

【讨论】:

    【解决方案2】:

    给定这些表名,我能想到的最有可能的查询是:

    SELECT u.Name, s.SaleID, r.ReturnAmount
    FROM Users u INNER JOIN
         Sales s
         ON u.UserID = s.UserID INNER JOIN
         Returns r
         on r.SaleID = s.SaleID;
    

    这将是一个非常不寻常的数据布局,在Users 表中有一个SaleID

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-19
      • 2021-03-25
      • 1970-01-01
      • 2014-07-01
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多