首页 > 解决方案 > SQL 根据 common 上的两列提取 IDS

问题描述

我需要弄清楚如何才能完成交给我的这个任务,你看,我已经导入了一个 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 广告将不起作用,因为它们与我正在使用的实际表中的 id 表中的内容非常不同,那么您认为实现此任务的最佳方法是什么?任何形式的帮助我将不胜感激,在此先感谢。

编辑

根据 R3_ 的回答,我尝试了他的查询,但适应了我的需求并在某些情况下工作,但在其他情况下我得到了笛卡尔积,我使用的示例是我在 column_a 的表 2 中有数字 1000,而 column_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

所以最重要的是与具有 1000-1 组合的 10 个 id 有关,因此 sql 不知道如何识别 id 应该去哪里,我该如何获得我需要的 45 个?

我还发现,如果我进行一般查询,会丢失一些行,这是我打印它的方式:

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,我做错了什么?

标签: sqlsql-serverdatabasesql-server-2008inner-join

解决方案


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

推荐阅读