Mysql子查询导致“where”子句

时间:2011-12-21 13:17:58

标签: mysql

是否可以像这样执行mysql查询?

select (select A from B where ... ) as C from D where C like ' ... '

我需要在一般的“where”子句中使用子查询的结果。

6 个答案:

答案 0 :(得分:27)

您可以将其包装在如下的子查询中:

SELECT * 
FROM (
        select (select A from B where ... ) as C from D
     ) subq
WHERE 
    C like ' ... '

答案 1 :(得分:10)

你读过这个吗?

http://dev.mysql.com/doc/refman/5.0/en/subqueries.html

  

子查询是另一个语句中的SELECT语句。

     

从MySQL 4.1开始,所有子查询表单和操作即   支持SQL标准要求,以及一些功能   是特定于MySQL的。

     

以下是子查询的示例:

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 
  

在此   例如,SELECT * FROM t1 ...是外部查询(或外部语句),   和(SELECT column1 FROM t2)是子查询。我们说子查询   嵌套在外部查询中,实际上可以嵌套   其他子查询中的子查询,相当深度。一个   子查询必须始终出现在括号内。

     

子查询的主要优点是:

     

它们允许结构化的查询,以便可以   隔离声明的每个部分。

     

他们提供了执行操作的替代方法   否则需要复杂的连接和联合。

     

许多人发现子查询比复杂的连接更具可读性   工会。实际上,正是子查询的创新给了人们   调用早期SQL“结构化查询”的最初想法   语言“。

     

这是一个示例声明,显示了主要观点   SQL标准指定并支持的子查询语法   MySQL的:

答案 2 :(得分:3)

虽然这实际上是有效的SQL:

select (select A from B where A = D.A ) as C 
from D

相反,实施JOIN会更好(性能更好):

SELECT D.A
FROM D
INNER JOIN B ON B.A = D.A

答案 3 :(得分:2)

不是没有说明;但你可以在两个地方运行查询。或者创建一个包含这些结果的临时表,并将它们连接起来,使其可用于查询..

Select C from D inner join (Select A from B where...) C on C.1=D.1 where C like....

答案 4 :(得分:0)

如果您的意思是比较子查询的结果,可以这样做。

select X ... where (select Y ... ) = Z

然而,可能是一个坏主意。通常,当您必须这样做时,最好寻找一种方法将其简化为主选择。有一些非常有创意的方法可以避免嵌套查询。原因是每次选择都必须每次都进行内部查询

如果您的意思是针对子查询执行某个位置,则只需选择all并应用于where。但是,再次,您可以在其他地方申请。

select X ... where Y = Z and A = B.

答案 5 :(得分:0)

连接表而不是子查询总是更好。 即 子查询:

var availableTags = [
      "ActionScript",
      "AppleScript",
      "Asp",
      "BASIC",
      "C",
      "C++",
      "Clojure",
      "COBOL",
      "ColdFusion",
      "Erlang",
      "Fortran",
      "Groovy",
      "Haskell",
      "Java",
      "JavaScript",
      "Lisp",
      "Perl",
      "PHP",
      "Python",
      "Ruby",
      "Scala",
      "Scheme"
    ];

$( "#tags" ).autocomplete({
  source: availableTags
});

<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>

加入:

SELECT id, (SELECT abc FROM t2 WHERE ID = user_id) as user_name FROM t1

如果我们尝试在子查询中放置where子句,则会抛出错误。