我的数据看起来像这样
object_id type
1 ISSN
1 ISBN
2 ISSN
2 ISSN
3 ISSN
3 KSBN
3 KSBN
4 ISSN
4 ISBN
我需要在同一查询中找到同时具有ISSN和ISBN的所有数据。
我找到的解决方案是使用此代码
select *
from table
where OBJECT_ID in
(
SELECT K.OBJECT_ID
FROM tableK
WHERE K.`TYPE` IN ('ISSN', 'ISBN')
GROUP BY K.OBJECT_ID
HAVING count(distinct K.TYPE) = 2
)
但是,由于数据集很大,因此需要很长时间才能运行。是否有不使用嵌套查询的选项。
当我直接放置objectID时,它几乎立即运行
select *
from table
where OBJECT_ID in
(
1,4
)
它运行得更快,因为它没有多次执行选择。但是当我尝试将输出保存为变量时,它会崩溃,因为它会返回多行。
是否可以在较小的数据集上进行任何类型的连接,因为在整个表上进行自反连接需要10分钟以上。
答案 0 :(得分:0)
这个怎么样?
SELECT t1.*, t2.* FROM table as t1
INNER JOIN table as t2
ON t1.object_id = t2.object_id
AND t2.type = "ISSN"
WHERE t1.type = "ISBN"