是否可以像这样执行mysql查询?
select (select A from B where ... ) as C from D where C like ' ... '
我需要在一般的“where”子句中使用子查询的结果。
答案 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子句,则会抛出错误。