sql - 使用复合主键查询表

标签 sql oracle

我有一个带有复合主键的表。这是一个交叉引用表,看起来像这样

Table 
ID    Relationship             ID2
1     Spouse                   10
2     Employee                 20
2     Former Employee          20
3     Former Employee          30
4     Child                    40

我正在尝试编写一个 ID2 匹配的查询,您有相同 ID 的员工和前员工

ID    Relationship             ID2
2     Employee                 20
2     Former Employee          20      

感谢任何帮助!!

最佳答案

OracleSQL ServerPostgreSQL 中:

SELECT  *
FROM    (
        SELECT  t.*,
                COUNT(*) OVER (PARTITION BY id, id2) AS cnt
        FROM    mytable t
        WHERE   relationship IN ('Employee', 'Former Employee')
        ) q
WHERE   cnt = 2

跨平台版本:

SELECT  t.*
FROM    (
        SELECT  id, id2
        FROM    mytable
        WHERE   relationship IN ('Employee', 'Former Employee')
        GROUP BY
                id, id2
        HAVING  COUNT(*) = 2
        ) q
JOIN    mytable t
ON      t.id = q.id
        AND t.id2 = q.id2
        AND t.relationship IN ('Employee', 'Former Employee')

关于sql - 使用复合主键查询表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5732432/

相关文章:

mysql - SQL 将 select 中的内容替换为左连接

sql - 如何使用 NOW() 函数作为范围的上限?

sql - 为什么 SQL 数据同步需要 SQL Server 本地数据库上的 Alter Database 权限?

mysql - 在一个查询中返回多个选定值?

python - Anaconda 3.5(64 位 Windows)安装 cx_Oracle

sql - 有没有办法检查截断表?

java - Spring JDBC 限制查询长度

java - 如何使用 SWT 和 MySql 在 TreeView 中显示列表值

database - 如何更改oracle 12c中的SYS和SYSTEM密码?

sql - Oracle如何将UTC时间转换为本地时间(缺少偏移量信息)