我有两张桌子,都包含各种公司。我想从tableOne
中显示的tableTwo
中选择所有内容(事实上,只有它出现在tableTwo
中)。我会通过比较他们的companyID
字段来做到这一点。它们对于列someYear
也必须具有相同的值。换句话说,当{并且仅当他们的tableTwo
列匹配时,我想从tableOne
返回someYear
中显示的公司。
tableOne
companyID someYear
--------- --------
1 2010
2 2009
3 2011
1 2011
7 2009
tableTwo
companyID someYear
--------- --------
1 2010
2 2008
3 2011
4 2011
5 2009
我想要返回1
和3
(公司2
的年份不同,所以我不想要它)。我无用的尝试:
SELECT one.*
FROM tableOne one, tableTwo two
WHERE one.[companyID] in (
SELECT DISTINCT companyID
FROM tableTwo
)
and one.someYear = two.someYear;
这里的问题是当两个表包含少于10,000个条目时,它返回数百万行。由于敏感信息,我无法完全重新创建输出。这里的表/列名称都是由我确定你能说出来的。另外我应该指出这两个表似乎都没有主键。我认为这导致他们无法匹配。我正在使用SQL Server 2008.任何帮助都将非常感激。
答案 0 :(得分:11)
试试这个
select one.*
from tableOne as one
inner join tableTwo as two
on one.companyID = two.companyID and
one.someYear = two.someYear
答案 1 :(得分:4)
INNER JOIN
不是执行半连接的唯一方法。这是另一种同样有效的方法:
SELECT *
FROM tableOne one
WHERE EXISTS (
SELECT *
FROM tableTwo two
WHERE one.companyID = two.companyID
AND one.someYear = two.someYear
);