SQL Query返回更多

时间:2016-09-21 13:26:21

标签: sql

我遇到一个SQL Query的问题,它会返回太多结果。我对SQL很新,所以请耐心等待。

请参阅以下内容:

Table Structures

我使用的查询如下:

    SELECT TABLE_B.*
    FROM 
        TABLE_A
    JOIN
        TABLE_B
    ON
        TABLE_A.COMMON_ID=TABLE_B.COMMON_ID
        AND TABLE_A.SEQ_3C=TABLE_B.SEQ_3C
    JOIN
        TABLE_C
    ON
        TABLE_A.COMMON_ID=TABLE_C.EMPLID
WHERE
        TABLE_B.ITEM_STATUS<>'C'
    and TABLE_A.CHECKLIST_STATUS='I'
    and TABLE_A.ADMIN_FUNCTION='ADMA'
    and TABLE_A.CHECKLIST_CD='APPL'
    and TABLE_A.COMMON_ID = '123456789'
    and TABLE_C.ADMIT_TERM='2171'
    and TABLE_C.INSTITUTION='SOMEWHERE'

我只想要Table_B的结果而不是它给我的结果。 请向我解释一下,因为我已经花了3天不间断。

我错过了什么?

4 个答案:

答案 0 :(得分:1)

您想要来自TABLE_B的数据吗?然后从中进行选择,并在where子句中的其他表中具有条件。

其他表上的内连接用作存在测试,我假设?不要这样做。您只需将您的记录相乘,就像您现在所做的那样,只是为了以后必须解除重复。这可能会导致大型表的性能下降和更复杂的查询中的错误。请改用EXISTSIN

select *
from table_b
where item_status <> 'C'
and (common_id, seq_3c) in
(
  select common_id, seq_3c 
  from table_a
  where checklist_status = 'I'
    and admin_function = 'ADMA'
    and checklist_cd = 'APPL'
)
and common_id in
(
  select EMPLID
  from table_c
  where admit_term = '2171'
    and institution = 'SOMEWHERE'
);

答案 1 :(得分:0)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-md-10">
   <input type="text" name="postcode" class="postcodeinput"  /> 
</div>

<div class="col-md-2">
    <a class="picklocation"><i class="fa fa-search"  aria-hidden="true">First Button</i>   
    </a>
</div>
<div class="col-md-10">
   <input type="text" name="postcode" class="postcodeinput" /> 
</div>

<div class="col-md-2">
    <a class="picklocation"><i class="fa fa-search" aria-hidden="true">Second Button</i>   
    </a>
</div>

答案 2 :(得分:0)

如果不查看所有表格和输出,这应该很容易理解。

假设您在列A上加入两个表Bid。您只需要表B和表B中的列`id&#39;列是唯一标识符。

即便如此,如果在表Aid(相同的id)出现五次,则联接将为id提供五行。然后你只需从表B中选择列,这样看起来你会在同一行中看到五次不同的时间。

也许你真的不需要加入?你试图解决的根本问题是什么?

答案 3 :(得分:0)

如果没有关于为什么要执行这些连接的更多信息,很难回答这个问题。我可以解释为什么你得到你得到的结果,希望这会让你自己解决问题。

您可以在FROM子句中使用表A开始。您可以使用表B在匹配COMMON_ID上加入此表,根据您提供的表,返回一条记录的三个匹配项您在表A中有。这会将结果集大小增加到三个记录。接下来,在匹配ID时,将这三个记录与表C连接起来。因为所有ID实际上都是相同的,所以这会为当前结果集中的每条记录返回9个匹配项:结果集中现在有9 x 3 = 27条记录。

最后,WHERE条款生效。该条款排除了表C中9条记录中的6条,因此您剩下3条记录。因此,您的最终结果集为1(表A)x 3(表B)x 3(表C)= 9记录。