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
表与table2
或table1
的关系如何?
是的,抱歉 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的主要内容,如果未能解决你的问题,请参考以下文章
如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)
SQL从日期范围内的同一表中的不同记录中获取多个项目的总和(ORACLE)