Sql查询需要创意解决方案

时间:2017-02-06 16:57:20

标签: mysql

我的数据看起来像这样

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分钟以上。

1 个答案:

答案 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"