簡體   English   中英

是否可以在另一個SELECT語句中使用SELECT語句的結果?

[英]Is it possible to use results from a SELECT statement within another SELECT statement?

這是我的代碼,但我確定它不是正確的方法。

mysql_query("SELECT * FROM BlockUsers
WHERE OwnerID =
(SELECT ID FROM UserAccounts WHERE Code='$UserCode')
AND
BlockID =
(SELECT ID FROM UserAccounts WHERE Code='$BlockUserCode')
LIMIT 1", $DB)

有人可以幫忙嗎? 謝謝!

是的,但是當你進行這樣的等式測試(=,<,>等等)時,子查詢必須返回一個值。 否則它將是somevalue = [list of result rows] ,這沒有任何意義。

你想要:

SELECT * FROM BlockUsers
WHERE OwnerID IN (SELECT ID FROM UserAccounts WHERE.....)
              ^^--- use 'in' instead of '=';
SELECT * FROM BlockUsers
WHERE OwnerID IN
(SELECT ID FROM UserAccounts WHERE Code='$UserCode')
AND
BlockID IN
(SELECT ID FROM UserAccounts WHERE Code='$BlockUserCode')
LIMIT 1

要么

SELECT * FROM BlockUsers AS bu
INNER JOIN UserAccounts AS ua1 ON ua1.ID = bu.OwnerID
INNER JOIN UserAccounts AS ua2 ON ua2.ID = bu.BlockID
WHERE ua1.Code = '$UserCode' AND ua2.Code = '$BlockUserCode'
LIMIT 1

我認為。 我沒有測試任何這個,但我很確定它很接近。

編輯:我剛剛注意到你正在使用MySQL。 你肯定想做內連接而不是子選擇。 在MySQL中,這些子選擇將創建沒有索引的派生表。 在這些派生表中查找OwnerID和BlockID將對它們進行全表掃描。 如果$ UserCode和$ BlockUserCode將子選擇的結果縮小到單行,這可能無關緊要,但如果它們返回相當多的行,它將真正減慢您的查詢速度。

您可以只使用JOIN UserAccounts來獲取所需的行,而不是使用子查詢。

SELECT BlockUsers.* FROM BlockUsers
JOIN UserAccounts as UA1 ON Code='$UserCode' AND OwnerID = UA1.ID
JOIN UserAccounts as UA2 ON Code='$BlockUserCode' AND BlockID = UA2.ID
LIMIT 1

是的你可以,子查詢,你可以在這里找到官方的mysql參考: http//dev.mysql.com/doc/refman/5.0/en/subqueries.html從你的查詢我覺得你很好去假設你的子查詢只返回1個值,或者@Marc B點使用IN而不是等號。

嘗試使用

SELECT * FROM BlockUsers, UserAccounts
WHERE (OwnerID = ID and BlockID=ID and Code in ('$BlockUserCode', '$UserCode')
LIMIT 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM