从子查询mysql中选择数据

Posted

技术标签:

【中文标题】从子查询mysql中选择数据【英文标题】:select data from subquery mysql 【发布时间】:2012-10-16 07:06:39 【问题描述】:
select t1.table1 from table1 as t1
where t1.column1 
in 
(
    select t2.column2 from table2 as t2 
    join 
    table3 as t3  on t2.column1=t3.column1 
    where t3.columnx=5
);

上面是我正在触发的 mysql 查询。还需要子查询表中的一些数据。

例如说表 t2 中的 columnxy。

查询失败

select t1.table1,t2.columnxy from table1 as t1
where t1.column1 
in 
(
    select t2.column2 from table2 as t2 
    join 
    table3 as t3  on t2.column1=t3.column1 
    where t3.columnx=5
);

如果我使用外部查询的选择添加它们会给出错误“未知列”,这确实有意义。

是正确的方法还是应该用连接重写查询?

【问题讨论】:

显示失败的查询 - 我们可以提供更好的建议 添加了失败的查询。 【参考方案1】:

用连接重写查询:

SELECT t1.table1, t.columnxy
FROM   table1 AS t1 JOIN (
  SELECT t2.column2, t2.columnxy
  FROM   table2 AS t2 JOIN table3 AS t3 USING (column1)
  WHERE  t3.columnx = 5
) t ON t1.column1 = t.column2

或者:

SELECT t1.table1, t2.columnxy
FROM   table1 AS t1
  JOIN table2 AS t2 ON t1.column1 = t2.column2
  JOIN table3 AS t3 ON t2.column1 = t3.column1
WHERE  t3.columnx = 5

【讨论】:

【参考方案2】:

此时 t2 不可用。您应该为此使用连接。使用 t1.column1=t2.column2 应该可以做到。

【讨论】:

对,这就是我遇到的问题,正在寻找解决方法。

以上是关于从子查询mysql中选择数据的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从子查询顺序中选择

MySQL 从子查询顺序中选择

MySQL 从子查询顺序中选择

MySQL 从子查询顺序中选择

MySQL的SQL语句 - 数据操作语句(13)- 子查询(12)

从子查询中删除多行的SQL语法错误