是否可以像這樣執行mysql查詢?Mysql子查詢導致「where」子句
select (select A from B where ...) as C from D where C like ' ... '
我需要在一般的「where」子句中使用子查詢的結果。
是否可以像這樣執行mysql查詢?Mysql子查詢導致「where」子句
select (select A from B where ...) as C from D where C like ' ... '
我需要在一般的「where」子句中使用子查詢的結果。
你可以用它在一個子查詢是這樣的:如圖所示
SELECT *
FROM (
select (select A from B where ...) as C from D
) subq
WHERE
C like ' ... '
你看過這個嗎?
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列1 FROM t2)是子查詢。我們說子查詢 嵌套在外部查詢中,實際上可以將 子查詢嵌套在其他子查詢中,達到相當深的程度。一個 子查詢必須始終出現在括號內。
子查詢的主要優點是:
他們允許那些結構化查詢,以便可以 隔離聲明的每個部分。
它們提供了替代方法來執行操作,否則將會需要複雜的聯接和聯合。
許多人發現子查詢比複雜連接或 工會更具可讀性。事實上,這是子查詢,給了人們 調用早期SQL的本意創新「結構化查詢 語言。」
下面是一個例子聲明顯示了有關 子查詢語法要點由SQL指定標準和 支持MySQL的:
無不是;但是你可以在兩個地方運行查詢。或者創建擁有這些結果的臨時表,並使其可用於查詢投身其中..
Select C from D inner join (Select A from B where...) C on C.1=D.1 where C like....
我想過在兩個地方都運行查詢,是的...最簡單的方法) – Eddie 2011-12-21 13:38:47
如果你的意思是比較在其中子查詢的結果,是的,你可以做到這一點。
select X ... where (select Y ...) = Z
然而,可能是一個壞主意。通常,當你必須這樣做時,最好找一種方法將它簡化爲主要選擇。有非常有創意的方法來避免嵌套查詢。原因在於每次選擇都必須每次都執行內部查詢
如果您的意思是針對子查詢執行where操作,則只需選擇all並應用where。然而,再次,你可以申請另一個地方。
select X ... where Y = Z and A = B.
我知道,這不是一個好主意,但它是我的目的的最佳解決方案。謝謝你的回答。 – Eddie 2011-12-21 13:27:03
@Eddie我知道這看起來可能是最好的解決方案。我可以看到你必須嵌套的查詢的一個例子,所以我可以看看它是否可以重寫?嵌套是O(n),並且不可能是令人討厭的。如果嵌套查詢每次都會產生相同的結果,那麼絕對不需要使用嵌套查詢。 – 2011-12-21 13:30:06
我需要創建一些東西,如「選擇field1,field2,sql3作爲field3,field4,sql5作爲field5從表field2 ='...',field5 ='...' – Eddie 2011-12-21 13:31:31
雖然這實際上是有效的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
我想過JOIN,但這樣會給我帶來困難。 – Eddie 2011-12-21 13:33:50
這始終是更好連接表而不是子查詢。 即 子查詢:
SELECT id, (SELECT abc FROM t2 WHERE ID = user_id) as user_name FROM t1
加入:
SELECT c.id,u.abc FROM t1 as c LEFT JOIN t2 AS u ON u.ID = c.user_id WHERE 1=1 AND u.`user_login` = 'qwe123'
如果我們試圖把其中子查詢子句,它拋出的錯誤。
+1你在我之前完成了... – 2011-12-21 13:22:07
我認爲這應該起作用,但我認爲我不能用它來達到我的目的。我需要創建一些像「選擇field1,field2,sql3作爲field3,field4,sql5作爲field5從表field2 ='...',field5 ='...' – Eddie 2011-12-21 13:30:12
@Eddie,是的,你可以使用它。將where子句中使用子查詢派生字段的部分移動到外部where子句中。 – 2011-12-21 13:32:23