SQL 从带有子查询的多个表中选择数据(包括来自内部连接的数据)错误:1242

Posted

技术标签:

【中文标题】SQL 从带有子查询的多个表中选择数据(包括来自内部连接的数据)错误:1242【英文标题】:SQL select data from multiple tables with subqueries (including data from inner join) Error: 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 【参考方案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;

【讨论】:

以上是关于SQL 从带有子查询的多个表中选择数据(包括来自内部连接的数据)错误:1242的主要内容,如果未能解决你的问题,请参考以下文章

sql子查询加入组

如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)

SQL从日期范围内的同一表中的不同记录中获取多个项目的总和(ORACLE)

从多个表中创建 Sql Server VIEW GROUPing BY,选择子查询作为别名

MySQL学习——SQL查询语句(连接查询&子查询)

带有(来自)别名的 SQL 子查询