【问题标题】:sql query to take data out of multiple tablessql查询从多个表中取出数据
【发布时间】:2014-10-03 08:56:08
【问题描述】:

我有(比如几个表)4 个表,A、B、C 和 D,它们通过一些常见值链接,例如:

TableA(A1,A2,A3,A4) ---> TableB(A1,B2,B3,B4) ---> TableC(C1,C2,B3,C4) ---> TableD(D1,D2,D3,C4)
                               |                             |
                         TableX(X1,B2,X3,X4)      TableY(Y1,Y2,Y3,C4)

对于A2 的每个唯一值,都有一个值A1A1 中存在相同的值 TableB。 同样在TableB中,对于A1的每个值,都有一些特定的值B2,B3,B4, 同样在TableCTableD 中,B3C4 的每个值也分别有特定的剩余值。

除了线性流之外,中间还有多个流(例如从 TableB 到 TableX 或从 TableC 到 TableY)

如果我的值为A2,我想提取一些列,例如A1,A2,B2,C1,D1C4

我是这类查询的新手,完成任务的时间很短。

提前感谢您的帮助。

【问题讨论】:

标签: mysql sql


【解决方案1】:

您必须像这样使用多重连接:

Select TableA.A1,TableA.A2,TableB.B2,TableC.C1,TableC.C4 from
TableA join TableB on TableA.A1=TableB.A1
join TableC on TableB.B3=TableC.B3    
where A2='....'

【讨论】:

    【解决方案2】:

    虽然发布了一个可怕的问题,但表格和解释的样本很差,但首先要询问如何将所有字段联系在一起。一旦你建立了所有的 JOIN 条件,然后添加你正在从数据中寻找特定元素的 WHERE

    select *
       from
          TableA a
             JOIN TableB b
                on a.A1 = b.A1
                JOIN TableC c
                   on b.b3 = c.b3
                   JOIN TableD d
                      on c.c4 = d.c4
       where
              a.field = '?'
          AND d.field = '?'
    

    或您正在寻找的任何标准...并且只需使用别名引用,例如 (a, b, c, d)

    从布局中注意到我有我的 SQL,您可以通过简单的视觉缩进和各个表之间非常清晰的列关系准确地看到一个表如何连接到另一个表的层次结构。

    【讨论】:

    • 感谢您接受如此可怕的问题,但是第一次工作并且需要今天完成项目,我别无选择。我得到了流量,但如果流量不是线性的怎么办。就像从 TableA 到 TableB 到 TableC 到 TableD 一样存在(如在最初的问题中),但是如果我有一个从 TableB 到 TableX 的子流程,并且可能是另一个子流程,比如从 Table C 到 TableY。我应该如何适应这个?感谢您的帮助。
    • @Jivi,您必须在公共元素表之间建立某种联系。这就是关系数据库的全部意义所在。只需将连接添加到相应的其他表中。如果 tableC 可以连接到 D、X 和 Z,只需将每个分别连接到 C 表。如果说.. tableX 中没有保证记录,则将其作为 LEFT JOIN 执行,这意味着我想要左表(例如:TableC)中的记录,即使右侧表(tableX)中没有记录。如果您有更多这些子流程,请更新您的问题,我会修改我的答案。
    猜你喜欢
    • 2020-11-29
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多