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