繁体   English   中英

SQL-查找键等于值的所有“关系ID”,然后选择包含那些“关系ID”的所有记录

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM