SQL连接两个具有公共行的表

时间:2014-08-01 04:49:53

标签: sql sybase

我在sybase中有2个表

Account_table

Id     account_code
1      A
2      B
3      C

Associate_table

id     account_code
1      A
1      B
1      C
2      A
2      B
3      A
3      C

我有这个SQL查询

SELECT * FROM account_table account, associate_table assoc
WHERE account.account_code = assoc.account_code

此查询将返回7行。我想要的是从associate_table返回行,这些行只对3个帐户是通用的,如下所示:

account id     account_code      Assoc Id
    1                A              1
    2                B              1
    3                C              1

任何人都可以帮助我做什么样的加入?

3 个答案:

答案 0 :(得分:1)

试试这个

SELECT AC.ID,AC.account_code,ASS.ID 
FROM account_table AC INNER JOIN associate_table AS ASS ON AC.account_code = ASS.account_code

答案 1 :(得分:1)

SELECT b.id account_id,a.code account_code,a.id assoc_id
 FROM  associate a, 
       account b 
WHERE  a.code = b.code 
  AND  a.id IN (SELECT a.id 
                    FROM   associate a, 
                           account b 
                    WHERE  a.code = b.code 
                    GROUP  BY a.id 
                    HAVING Count(*) = (SELECT Count(*) 
                                       FROM   account)); 

注意:只有在帐户表的Id和account_code列中包含唯一值时,此查询才有效。而且,您的associate_table应包含(id,account,code)的唯一组合。即,关联表不应包含(1,A)或任何对两次。

答案 2 :(得分:0)

确定答案已被接受我会发布更简单的答案:

SELECT *
FROM account_table   AS account,
     associate_table AS assoc
WHERE account.account_code  = assoc.account_code 
HAVING (
        SELECT
          COUNT(*)
        FROM associate_table assoc_2
        WHERE assoc_2.id = assoc.id
    ) = 3

此处3是表格account的代码数量,如果它是动态的(随时间变化),

您可以使用(SELECT COUNT(*) FROM account_table)而不是确切的数字。此外,我确信它将被数据库引擎缓存,因此需要更少的资源