【问题标题】:MySQL query - joining a varying number of rows from one table [duplicate]MySQL查询 - 从一个表中加入不同数量的行[重复]
【发布时间】:2017-02-15 23:20:03
【问题描述】:

我四处寻找类似的问题,但如果它存在,我还没有找到。

我不认为这是重复的,因为我试图从 TableB 中获取多行并与 tableA 中的单行组合,这在另一个问题中没有显示。

考虑下表。

|TableA       |
|id     value1|
|1     |3     |
|2     |10    |
|3     |10    |
|4     |6     |
|5     |10    |

|TableB              |
|id     Aid    value2|
|1     |1     |14    |
|2     |1     |93    |
|3     |2     |30    |
|4     |3     |12    |
|5     |3     |62    |
|6     |3     |2     |
|7     |4     |2     |
|8     |4     |29    |
|9     |5     |50    |

我希望每一行都来自 TableA WHERE value1=10,但我也希望它们与 TableB 中的所有行连接,这些行具有这些 TableA 行的 id 作为它们的 Aid 值。

基本上,我想取回 3 行:TableA 第 2、3 和 5 行,其中第 1 行与 TableB 的第 3 行连接,第 2 行与 TableB 的第 4、第 5 和第 6 行连接,第 3 行与 TableB 的第 9 行连接。

我该怎么做呢?一个查询甚至可能吗?如果可以,结果会是什么?

这大概是我得到的...

SELECT a.*, b.* FROM TableA AS a JOIN TableB AS b ON a.id=b.Aid WHERE a.value1=10

【问题讨论】:

  • 欺骗目标,第二个答案,来自丹尼尔
  • 感谢您的帮助,但由于问题本身现在说明的原因,我认为这并不是真正的重复。
  • 我相信它已显示并且是带有别名的简单连接语法,决定显示哪些列以及 where 子句。如果您在一小时内仍然为此苦苦挣扎,请在给sqlfiddle 提供网址后用@ 符号向我发送消息@

标签: mysql join


【解决方案1】:

你是说

SELECT a.*, b.* FROM TableA AS a JOIN TableB AS b ON a.id=b.Aid WHERE a.value1 = 10

?

【讨论】:

    【解决方案2】:

    最好使用 INNER JOIN 这个词,这样当您再次查看此代码时就可以清楚地知道您使用的是什么连接

    SELECT a.*, b.* FROM TableA AS a INNER JOIN TableB AS b ON a.id=b.Aid
    WHERE a.value1=10 
    

    我为解决您的问题而添加的最后一点

    【讨论】:

    • 谢谢,但我不确定我是否足够清楚地说明了我想要做什么。对于 value1=10 的每个 tableA 行,我想将它与 tableB 中的许多行的 Aid 等于表一中的 id 连接。这应该会导致每个表有一行 value1=10 的行,或总共 3 行。
    【解决方案3】:
    SELECT a.*, b.* 
    FROM TableA AS a 
    JOIN TableB AS b ON a.id = b.Aid 
    WHERE a.value1 = 10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-10
      • 2014-06-01
      • 2013-03-04
      • 2013-11-26
      • 2011-05-29
      • 2022-01-18
      • 2017-04-27
      • 1970-01-01
      相关资源
      最近更新 更多