基于公共数据库上的两列的SQL提取ID

基于公共数据库上的两列的SQL提取ID,sql,sql-server,database,sql-server-2008,inner-join,Sql,Sql Server,Database,Sql Server 2008,Inner Join,我需要弄清楚如何完成交给我的任务,你看,我已经导入了一个Excel,清理了信息,并使用这些信息开始加入我需要的表,当我开始的时候,我意识到我需要做得非常精确,所以我需要我正在使用的数据的id,它不在我导入的Excel文档中(因为id存储在数据库中,Excel是由其他不处理数据库的人创建的),所以我有一个同事,我问他如何完成这项任务,他告诉我在公共列上进行内部联接,但我这样做的方式似乎是错误的,逻辑上不起作用,因此我认为从存储它们的表中提取id是一个好主意(也许不是),但我不知道如何做,也不知道它

我需要弄清楚如何完成交给我的任务,你看,我已经导入了一个Excel,清理了信息,并使用这些信息开始加入我需要的表,当我开始的时候,我意识到我需要做得非常精确,所以我需要我正在使用的数据的id,它不在我导入的Excel文档中(因为id存储在数据库中,Excel是由其他不处理数据库的人创建的),所以我有一个同事,我问他如何完成这项任务,他告诉我在公共列上进行内部联接,但我这样做的方式似乎是错误的,逻辑上不起作用,因此我认为从存储它们的表中提取id是一个好主意(也许不是),但我不知道如何做,也不知道它是否会起作用,我将给出一些表的外观示例:

table 1 
----------------------
|ID|column_a|column_b|
|1 |2234    |3       |
|2 |41245   |23      |
|3 |442     |434     |
|4 |1243    |1       |
----------------------

table 2 
---------------------------------
|creation_date|column_a|column_b|
|1/12/2018    |2234    |3       |
|4/31/2011    |41245   |23      |
|7/22/2014    |442     |434     |
|10/14/2017   |1243    |1       |
---------------------------------
如您所见,a列和b列的值完全匹配,因此两个表之间可能存在一个桥接,我尝试通过a列连接数据,但没有成功,因为输出比我应该的大得多,我还尝试使用IN语句进行简单查询,但也不起作用,因为我提出了几乎所有重复的数据库(我使用的是大型数据库表1包含近35.000行,表2包含近10.000行)如果它们是行文件,则提取ids ad将不起作用,因为它们与我正在处理的实际表中的id表中的内容非常不同,那么您认为实现此任务的最佳方法是什么?任何形式的帮助我都会非常感激,提前谢谢

编辑

根据R3的答案,我尝试了他的查询,但适应了我的需要,在某些情况下进行了工作,但在其他情况下,我得到了笛卡尔积,我使用的示例是,我在表2中的a列有数字1000,b列有数字1,表1有10个ID用于该数字组合,因为1000-1的数字不同(从技术上讲是这样,但它存储了不同的信息,并且通常由ID来区分)因此,输出要么是10行(假设它只选取具有ID的行),要么是450行,而不是我需要的45行,因此,我使用的查询如下所示:

SELECT DISTINCT table_1.id, table_2.column_a, table_2.column_b --if i pick the columns from table 1 returns 10 rows if i pick them from table 2 it returns 450
    FROM            table_2
    INNER JOIN      table_1 ON table_2.column_a = table_1.column_a AND table_1.column_b = table_2.column_b
    WHERE           table_2.column_a = 1022 AND table_2.column_b = 1
所以重要的是10个id有1000-1的组合,所以sql不知道如何识别id应该放在哪里,我如何才能获得我需要的45个id

我还发现,如果我执行常规查询,会缺少一些行,下面是我打印它的方式:

SELECT       table_1.id, table_1.column_a, table_1.column_b 
FROM         table_2 --in this case i try switching the columns i return from table 1 or 2
INNER JOIN   table_1 ON table_2.column_a = table_1.column_a AND table_2.column_b = table_1.column_b

后一个示例的输出是2666行,应该是2733行,我做错了什么?

4/31/2011
?!?列数据类型?除了表2中的日期之外,所有列都是数字的,但匹配的列是数字的通常在我将Excel导入数据库时是varchar或varchardatetime@Larnu这将如何影响数据或数据的提取表的连接?@Larnu,尤其是当4月31日出现时……嗨,R3_u我会试试你发布的代码,并告诉你它是否有效这是预期的,为了过滤掉所有这些,你需要使用WHERE子句。
WHERE id IN('01','02'))
例如,现在它确实起作用了!我照你说的做了,效果很好!我错过了你发布的一行代码,我仔细检查了一下,我意识到,非常感谢你:DNo问题,如果我理解正确,你需要将SELECT子句设置为SELECT DISTINCT
SELECT DISTINCT ID,tab1.column\a,tab1.column\b,creation\u date
。如果你对于相同的组合有不同的ID,对于相同的组合有不同的日期,并且通过该组合进行连接,那么连接似乎是正确的,它应该生成ID和日期的所有组合。数据不够干净。若要进一步清理,可以将第二个表分组以获取最小/最大日期,或者将第一个表分组以获取数据最小/最大ID(或两者都有)。最好以预期结果为例。
SELECT DISTINCT -- Adding DISTINCT clause for unique pairs of ID and creation_date
ID, tab1.column_a, tab1.column_b, creation_date  
FROM [table 1] as tab1
LEFT JOIN [table 2] as tab2 -- OR INNER JOIN
ON tab1.column_a = tab2.column_a
AND tab1.column_b = tab2.column_b
-- WHERE ID IN ('01', '02') -- Filtering by desired ID