Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在连接具有重复值的列时避免重复_Sql_Tsql - Fatal编程技术网

Sql 在连接具有重复值的列时避免重复

Sql 在连接具有重复值的列时避免重复,sql,tsql,Sql,Tsql,我试图联接的表列在我试图联接的列中有多个重复的结果。一个例子看起来有点像: Month | code | crime ----------------------- 2017-1 | EO99 | Burglary 2017-1 | EO99 | Shoplifting 2017-2 | FO01 | Anti-Social Behaviour 正在联接的表如下所示: Contents | F4 ----------------------- EO99 | 4581 EO

我试图联接的表列在我试图联接的列中有多个重复的结果。一个例子看起来有点像:

Month  | code | crime  
-----------------------
2017-1 | EO99 | Burglary
2017-1 | EO99 | Shoplifting
2017-2 | FO01 | Anti-Social Behaviour
正在联接的表如下所示:

Contents | F4  
-----------------------
EO99     | 4581  
EO98     | 10255 
FO01     | 4898  
期望的结果是:

Month  | code | crime                  | Population
---------------------------------------|------------
2017-1 | EO99 | Burglary               | 4581
2017-1 | EO99 | Shoplifting            | 4581
2017-2 | FO01 | Anti-Social Behaviour  | 4898
我正试图加入代码列,以添加第四列,其中包含人口数据。以下是我当前的查询:

DROP TABLE LSOA_crimes_2017_joined;
SELECT DISTINCT
    crimes_data_GM_2017_2018.*, 
    ['2017_LSOA_Pop.'].F4 AS Population
INTO 
    LSOA_crimes_2017_joined
FROM 
    crimes_data_GM_2017_2018 AS data,
    ['2017_LSOA_Pop.']
INNER JOIN 
    crimes_data_GM_2017_2018 ON
    crimes_data_GM_2017_2018.[LSOA code] = 
    ['2017_LSOA_Pop.'].[Contents]
WHERE 
    crimes_data_GM_2017_2018.Month LIKE '2017%';

使用Distinct有助于避免对每个结果产生疯狂的重复,但由于某些结果是完全相同但不同的犯罪实例,我需要两者都在新表中。

在from子句中有两个表,这就是创建笛卡尔积。您可能需要执行以下操作:

DROP TABLE LSOA_crimes_2017_joined;
SELECT DISTINCT
    crimes_data_GM_2017_2018.*, 
    ['2017_LSOA_Pop.'].F4 AS Population
INTO 
    LSOA_crimes_2017_joined
FROM 
    crimes_data_GM_2017_2018 AS data
INNER JOIN 
    ['2017_LSOA_Pop.'] ON
    crimes_data_GM_2017_2018.[LSOA code] = 
    ['2017_LSOA_Pop.'].[Contents]
WHERE 
    crimes_data_GM_2017_2018.Month LIKE '2017%';

仅来自一个表的示例数据并没有特别的帮助。来自所有表的样本数据,以及所需的结果,以及对所需结果的清晰解释。@GordonLinoff我编辑以添加一些
不同的
通常是一种代码味道,连接没有被正确考虑。你真的需要解释你有什么样的复制品,以及你想如何处理它们。你真的应该为你的表选择更好的名字,我最初并没有两个名字。我把第二个放进去,因为我一直收到“多部分标识符无法绑定”的错误,该错误适用于犯罪数据2017\u 2018.LSOA代码和犯罪数据2017\u GM\u 2018.Month。我还收到错误“列前缀'crimes\u data\u GM\u 2017\u 2018'与查询中使用的表名或别名不匹配。”以及错误“对象或列名丢失或为空”。但是当我在from子句中放入第二个表时,我没有得到任何错误。您只需要from子句中的一个表,以及具有如上所示条件的内部联接中的另一个表。此外,除非表crimes\U data\U GM\U 2017\U 2018中存在重复,否则在FROM子句中放置两个表时,不需要区分,这产生了“疯狂的重复”,因为它将一个表的每一行与另一个表的每一行相结合(笛卡尔积)