【问题标题】:Combining sql statements into single statement将sql语句组合成单个语句
【发布时间】:2013-08-02 23:22:13
【问题描述】:

我有 4 张桌子,分别是 A、B、C、D。

“D”有两列“id”和“Cid”

“C”有两列“id”和“Bid”

“B”有两列“id”和“Aid”

如果我想获得“Cid”,我会选择"SELECT Cid FROM D where id = value which I enter"。

如果我想获得“投标”,我会这样做"SELECT Bid from C where id = result of Cid from above query"。

如果我想获得“援助”,我会这样做"SELECT Aid from B where id =result is Bid from above query"。

如您所见,这些表是相互关联的。

如何结合以上SQL语句直接获取“Aid”;如何在一条 SQL 语句中获得“帮助”?

【问题讨论】:

标签: php mysql database mysqli


【解决方案1】:

试试

    select tb.Aid
      from D td
inner join C tc ON ( tc.id = td.Cid )
inner join B tb ON ( tb.id = tc.Bid )
     where d.id = :value
         ;

【讨论】:

  • 我不明白为什么人们在查询中使用别名表,而这完全没有必要。它只会增加噪音,不是吗?有时它可能非常有用,但在这种情况下,您的查询将更容易阅读(IMO)w/o。
  • @Madbreaks:这是一种习惯。经验(至少我的)表明,在维护查询时,无论如何您最终都需要别名。与您的印象相反,恕我直言,使用别名也使查询更具可读性,特别是如果不同的表具有相同名称的列,即使在技术上不需要消除歧义。 ymmv,当然。
  • 感谢您的回复,我当然可以理解这种观点。
【解决方案2】:

首先制作一个表。

然后阅读hierarchal data can be retrieved from mysql的方式

【讨论】:

    【解决方案3】:

    当您开始使用 JOIN 时,您的关系结构会变得很有用:

    SELECT A.id
    FROM D
    JOIN C ON D.Cid = C.id
    JOIN B on C.Bid = B.id
    JOIN A on B.Aid = A.id
    WHERE D.id = 'foo';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-07
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多