sql - 根据匹配列进行选择

标签 sql sql-server sql-server-2008

我有两个表,都包含不同的公司。我想从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

我要回13 (公司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。任何帮助将不胜感激。

最佳答案

试试这个

select one.*
from tableOne as one
  inner join tableTwo as two
    on one.companyID = two.companyID and
       one.someYear = two.someYear

关于sql - 根据匹配列进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122794/

相关文章:

sql-server - 运算符 >+ 与 SQL Server 2012 中的 >= 有何不同

sql - 使用 order by 时的动态 order by - 加速

sql - 如果 count(values) > 1,则将所有值合并到一个单元格中

sql-server - PIVOT 查询给出 NULL 值

mysql - 更改字符集后无法添加外键约束

php - MySQL 头痛,我应该还是不应该?

java - 如何验证sql查询语法?

MySQL 判断系统每小时查询的用户数

ASP.NET SQL Server session 状态非常慢

c# - 通过 EntityFramework 插入默认值