【问题标题】:SQL select data from multiple tables with subqueries (including data from inner join) Error: 1242SQL 从带有子查询的多个表中选择数据(包括来自内部连接的数据)错误:1242
【发布时间】:2015-11-26 14:29:45
【问题描述】:

我想显示来自 Table1 (TID) 的 ID 和内部连接的结果。 以下语句无效。

情况:两张表:

  • 表 1 PK:TID,FK:Table2_PID
  • 表 2 PK:PID、名称

在其他数据中,我想显示存储在 Table2 中的 Table1 中每个 PID 的名称。

SELECT T.TID 
    ,(Select P.Name
        from mydb.Table2 P
        inner join mydb.Table1 T
        on P.PID=T.Table2_PID) 
    FROM mydb.Ticket T;

Result: Error Code 1242. Subquery returns more than 1 row

我知道结果返回超过 1 行,但我想显示存储在 Table2 中的 Table1 中每个 PID 的名称。那么关于我如何做到这一点的任何想法?

PS:我正在使用 mySQL 并使用 MySQL Workbench v6.3

【问题讨论】:

  • 您的第二个选择语句作为派生表属于 FROM。
  • 您的ticket 表与table2table1 的关系如何?
  • 是的,抱歉 Ticket 是 Table1

标签: mysql sql database subquery mysql-error-1242


【解决方案1】:

您不需要使用内部连接来获取 ID 的所有名称。你可以试试默认的join来达到效果。

select t2.pid, t2.name from mydb.Table2 t2, mydb.Table1 t1 where t1.pid = t2.pid;

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    你必须像这样使用join

    select t1.TID,t2.Name from Table1 t1 left join Table2 t2 on t1.Table2_PID=t2.PID
    

    【讨论】:

      【解决方案3】:

      感谢您的回复,但问题/问题仍然存在。 这与加入无关。

      关于子查询并在其中选择多行。

      【讨论】:

        【解决方案4】:

        谢谢你们, 我在想一个复杂的解决方法。我使用一个简单的 where 语句解决了它。

        SELECT T.TID, P.Name
        FROM mydb.table1 T, mydb.table2 P
        WHERE P.PID=T.table2_PID;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-09
          • 2012-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多