sql - 查询获取相交

标签 sql database

我正在解决一些有关SPJ数据库的问题。

S(SNUM, SNAME) [supplier]
P(PNUM, PNAME) [part]
J(JNUM, JNAME) [project]
SPJ(SNUM, PNUM, JNUM, Q)

查询是:获取至少有 100 个共同部分的项目对。
到目前为止我已经为其编写了代码:

SELECT X.JNUM, Y.JNUM FROM SPJ AS X, SPJ AS Y
    WHERE 100 <= (SELECT COUNT(PNUM) FROM (SELECT PNUM FROM SPJ WHERE SPJ.JN=X.JN 
                                            INTERSECT
                                           SELECT PNUM FROM SPJ WHERE SPJ.JN=Y.JN));

我认为我的解决方案是正确的。还有其他方法可以解决这个问题吗?

最佳答案

只需获取所有相同部分的组合,然后查看每个项目对获得多少匹配:

select spj1.jnum as jnum1, spj2.jnum as jnum2 
from spj spj1
join spj spj2 on spj1.pnum = spj2.pnum and spj1.jnum < spj2.jnum
group by spj1.jnum, spj2.jnum
having count(distinct spj1.pnum) >= 100;

关于sql - 查询获取相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27171171/

相关文章:

sql - MS Access 2007中SQL语句的查询表达式中的语法错误(逗号)

mysql - 我已经对组合列建立了索引,是否也应该对单独的列建立索引?

python-3.x - Python : Unable to install hdbcli library on Python 3. 8 安装

java - Java 函数和 DB 函数哪个性能更好?

python - 从 arduino 记录值到 postgres db

mysql - 在 Mysql (WAMP) 中传输完整的数据库

MySql选择用户添加的用户

sql - 如何根据另一个sp的多次输出执行一个sp多次

sql - 为什么这个 Join-Update 查询会更新所有值?

sql - 加入 T-SQL 时计算零值