Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
Mysql 从多个表中提取数据的sql查询_Mysql_Sql - Fatal编程技术网

Mysql 从多个表中提取数据的sql查询

Mysql 从多个表中提取数据的sql查询,mysql,sql,Mysql,Sql,我有几个表,比如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)

我有几个表,比如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的每个唯一值,都有一个值A1。表B中有相同的值A1。 类似地,在表B中,对于A1的每个值,有一些特定值B2、B3、B4, 同样,在表C和表D中,对于B3和C4的每个值,分别存在特定的剩余值

除了线性流之外,在表B到表X或表C到表Y之间还有多个流

我想提取一些列,比如A1、A2、B2、C1、D1和C4,如果给定A2的值

我不熟悉这种类型的查询,没有时间完成任务


提前感谢您的帮助。

您必须使用以下多重连接:

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='....'

虽然这是一个糟糕的问题,但表和解释的示例很差,首先要查询如何将所有字段绑定在一起。一旦建立了所有连接条件,然后添加从数据中查找特定元素的位置

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布局中,您可以通过简单的视觉缩进和各个表之间非常清晰的列关系,准确地看到一个表如何连接到另一个表的层次结构。

我想简单的连接可以解决这个问题。感谢您提出这样一个可怕的问题,但是第一次工作,需要今天完成这个项目,我别无选择。我得到了流量,但如果流量不是线性的呢。如表A到表B到表C到表D一样,存在于初始问题中,但如果我有一个子流,则表示从表B到表X,可能是另一个子流,如表C到表Y。我该如何适应这种情况?谢谢您的帮助。@Jivi,您必须在公共元素表之间建立某种连接。这就是关系数据库的全部要点。只需将join添加到相应的其他表中。如果tableC可以连接到D、X和Z,只需将每个表分别连接到C表即可。如果没有保证的记录,比如。。tableX,然后将其作为左连接来执行,这意味着我需要来自左表ex:TableC的记录,即使右侧表tableX中没有记录。如果您有更多这些子流程,请更新您的问题,我将修改我的答案。