我在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
任何人都可以帮助我做什么样的加入?
答案 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)
而不是确切的数字。此外,我确信它将被数据库引擎缓存,因此需要更少的资源