問題
我無法將兩個 SQL 查詢合并為一個。我想使用第一個查詢中的部分資料來訪問不同的表并檢索更多資訊。
描述
我有以下查詢,可以獲取標題中包含“html”一詞的前 50 篇 Stackoverflow 帖子:
SELECT top 50
Id AS [Post Link],
Title,
Score,
OwnerUserId
FROM Posts
WHERE Title LIKE lower('%html%')
ORDER BY
Score DESC
當我檢索到這些資料時,我想獲取 50 個 OwnerUserIds 并查詢 Users 表以獲取他們的 AboutMe 并將其與“主查詢”的結果一起顯示。據我了解,這可以使用子查詢來實作,但我不太確定如何實作。我想做的是:
SELECT AboutMe
FROM Users
WHERE Id = OwnerUserId (having taken the OwnerUserId from the first query)
任何幫助是極大的贊賞
uj5u.com熱心網友回復:
我不認為你想要一個可能看起來像的子查詢
SELECT AboutMe
FROM Users
WHERE Id in
(
SELECT top 50
OwnerUserId
FROM Posts
WHERE Title LIKE lower('%html%')
ORDER BY
Score DESC
)
我認為您真的希望一個查詢通過連接兩個表來回傳所有結果,例如
SELECT top 50
Posts.Id AS [Post Link],
Posts.Title,
Posts.Score,
Posts.OwnerUserId,
Users.AboutMe
FROM Posts
Inner join users on users.id = Posts.OwnerUserId
WHERE Title LIKE lower('%html%')
ORDER BY
Posts.Score DESC
uj5u.com熱心網友回復:
您沒有提到您使用的是什么 DBMS,但通常您可以使用類似IS IN. 請參閱PostgreSQL 檔案中的此示例。將它與 a 結合起來LIMIT,它應該會產生你正在尋找的東西。
最終的查詢看起來像
SELECT aboutme
FROM users
WHERE id IN (
SELECT owneruserid
FROM posts
WHERE title LIKE LOWER('%html%')
ORDER BY score DESC
LIMIT 50
)
您也可以使用CTE而不是將子查詢放在 WHERE 陳述句中以獲得更好的可讀性。
同樣取決于您希望如何處理一個用戶有兩個前 50 篇帖子的情況,您需要向查詢添加 DISTINCT 以僅獲取唯一的 user_ids
uj5u.com熱心網友回復:
試試這個查詢,
SELECT AboutMe
FROM Users
WHERE Id in
(
SELECT top 50 OwnerUserId
FROM Posts
WHERE Title LIKE lower('%html%')
ORDER BY Score DESC
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399486.html
標籤:sql
