【问题标题】:Simple SELECT, but adding JOIN returns too many rows简单的 SELECT,但添加 JOIN 会返回太多行
【发布时间】:2013-08-01 16:10:30
【问题描述】:

下面的查询返回 9,817 条记录。现在,我想从另一个表中再选择一个字段。查看被注释掉的 2 行,在这里我只是选择了这个附加字段并添加了一个 JOIN 语句来绑定这个新列。添加这些行后,查询现在返回 649,200 条记录,我不知道为什么!我想我的 WHERE 标准与 JOIN 语句一起出现了问题。请帮忙,谢谢。

选择 DISTINCT dbo.IMPORT_DOCUMENTS.ITEMID、BEGDOC、BATCHID

--, dbo.CATEGORY_COLLECTION_CATEGORY_RESULTS.CATEGORY_ID

来自 IMPORT_DOCUMENTS

--加入 dbo.CATEGORY_COLLECTION_CATEGORY_RESULTS

dbo.CATEGORY_COLLECTION_CATEGORY_RESULTS.ITEMID = dbo.IMPORT_DOCUMENTS.ITEMID

WHERE(BATCHID LIKE 'IC0%' 或 BATCHID LIKE 'LP0%')

AND dbo.IMPORT_DOCUMENTS.ITEMID IN

  (SELECT dbo.CATEGORY_COLLECTION_CATEGORY_RESULTS.ITEMID FROM 

CATEGORY_COLLECTION_CATEGORY_RESULTS

    WHERE SCORE >= .7 AND SCORE <= .75 AND CATEGORY_ID IN(

      SELECT CATEGORY_ID FROM CATEGORY_COLLECTION_CATS WHERE COLLECTION_ID IN (11,16))

   AND Sample_Id > 0)

AND dbo.IMPORT_DOCUMENTS.ITEMID NOT IN

(SELECT ASSIGNMENT_FOLDER_DOCUMENTS.Item_Id FROM ASSIGNMENT_FOLDER_DOCUMENTS)

【问题讨论】:

  • 每个 IMPORT_DOCUMENT 可能平均有大约 70 个 CATEGORY_COLLECTION_CATEGORY_RESULTS 吗?

标签: select join where


【解决方案1】:

一个可能的原因是您的一个表包含较低级别的数据,低于您的连接键。例如,每个项目 id 可能有多个记录。相同的项目 id 重复 X 次。我会像下面这样修复查询。如果没有数据知识,请尝试运行以下修改后的查询...。如果输出不是您要查找的内容,请将其转换为 SELECT 内的选择...

希望这会有所帮助....

试试这个 SQL:SELECT DISTINCT a.ITEMID, a.BEGDOC, a.BATCHID, b.CATEGORY_ID FROM IMPORT_DOCUMENTS a JOIN (SELECT DISTINCT ITEMID FROM CATEGORY_COLLECTION_CATEGORY_RESULTS WHERE SCORE >= .7 AND SCORE 0) B ON a.ITEMID =b.ITEMID WHERE a.(a.BATCHID LIKE 'IC0%' OR a.BATCHID LIKE 'LP0%')并且 a.ITEMID 不在(从 ASSIGNMENT_FOLDER_DOCUMENTS 中选择 DIDTINCT Item_Id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    相关资源
    最近更新 更多