[英]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.