这两个查询之间有什么区别(使用IN和JOIN)?

时间:2015-06-19 11:14:39

标签: sql sql-server

我必须找到两者中的匹配记录(NPI)。我尝试了以下两个查询。但两者都给出了不同的计数结果(分别为12000和200000)。 之间:

SELECT * FROM Emblem_Attested 
WHERE NPINUMBER IN (SELECT NPINUMBER FROM Empire_Attested)

SELECT * FROM Empire_Attested emp JOIN Emblem_Attested emb ON emp.NPINUMBER = emb.NPINUMBER

我不知道哪一个是正确的。

4 个答案:

答案 0 :(得分:0)

IN子句只会为Emblem_AttestedNPINUMBEREmpire_Attested的行提供Emblem_Attested。如果NPINUMBER中的记录与Emblem_Attested相同,则不会影响结果。

例如,如果NPINUMBER的{​​{1}} 1Empire_Arrested表的多个记录的NPINUMBER1。然后,只有NPINUMBER 1只会返回一条记录。

如果JOIN中有多条记录与Emblem_Attested相同,则NPINUMBER会为您提供更多记录。如果Emblem_Attested中存在重复的NPINUMBER,那么您将在JOIN的结果中获得更多记录。这就是你所看到的。

使用JOINEmblem_Attested NPINUMBER 1 Empire_ArrestedNPINUMBER表有多个1 { {1}}。然后将返回多个记录,因为联接将返回Empire_ArrestedNPINUMBER 1 Emblem_Attested的每条记录的记录。

答案 1 :(得分:0)

他们看起来有点不同。

有两个很大的不同。第二个从两个表中获取列,第一个只从JOIN获取。

另一个区别是,如果Empire_Attested中存在重复项,IN将返回多行。 var page_list = [ 'dkey', 'dvalue' ]; var arr = []; //Create new array arr.push(page_list); //Push page_list var json = '{"key1":"value1","key2":"value2","key3":"value3"}'; var jp = JSON.parse(json); for( var key in jp ) { arr.push([key, jp[key]]); //Push key, value } document.write(JSON.stringify(arr)) //outputs //[["dkey","dvalue"],["key1","value1"],["key2","value2"],["key3","value3"]]不会返回此类重复项。

答案 2 :(得分:0)

第一个查询将返回表Emblem_Attested中存在的NPINUMBER Empire_Attested的所有记录。

第二个将返回两个表的所有记录,它们在NPINUMBER列中具有相同的值,这意味着您将获得包含两个表的列的记录集。此外,如果NPINUMBEREmpire_Attested的任何Emblem_Attested出现在Emblem_Attested以上,您将获得Emblem_Attested中每个值的记录,{{1}列上的重复数据}}

答案 3 :(得分:0)

如果存在多个子行(Empire_Attested?),

连接将复制父行(Empire_Attested?)。 IN查询将返回单个父行。 我正在Empire_Attested表上寻找多个条目。

您应该使用以下查询

查看
SELECT NPINUMBER, COUNT(*) Qty 
FROM Empire_Attested 
GROUP BY NPINumber
ORDER BY COUNT(*) DESC
相关问题