[英]SQL - Find all “Relationship IDs” where key equals value, then select all records containing those “Relationship IDs”
我有一個巨大的痛苦的繼承表,其中包含幾百萬條記錄,我無法高效查詢。 該表看起來像這樣:
id | submissionId | key | value
------------------------------------
1 | 1 | userID | 1
2 | 1 | data | stuff
3 | 2 | userID | 2
4 | 2 | data | stuff2
5 | 2 | data2 | stuff3
6 | 3 | userID | 1
7 | 3 | data | stuff2
8 | 3 | data2 | stuff3
我要查詢的是為特定用戶選擇所有“提交數據”。 因此, userID === 1
的結果將僅選擇與userID相關的“提交數據”,即:
1 | 1 | userID | 1
2 | 1 | data | stuff
6 | 3 | userID | 1
7 | 3 | data | stuff2
8 | 3 | data2 | stuff3
目前,我最好的解決方案是為特定的userID選擇所有記錄。 然后遍歷結果,並將submittingID放入數組。 然后,選擇我的數組中submissionID與submissionID匹配的所有記錄。
因為大約有15,000個用戶也需要循環通過,所以這變得非常耗時。 任何使此效率更高或在單個查詢中的想法將不勝感激!
你可以簡單地查詢具有任何記錄submissionId
與特定value
:
SELECT *
FROM submissions
WHERE submissionId IN (SELECT submissionId
FROM submissions
WHERE value = 1 AND key = 'userID')
您可以嘗試使用EXISTS
:
SELECT *
FROM mytable AS t1
WHERE EXISTS (SELECT *
FROM mytable AS t2
WHERE t2.submissionId = t1.submissionId AND
t2.key = 'userID' AND t2.value = 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.