我遇到一个SQL Query的问题,它会返回太多结果。我对SQL很新,所以请耐心等待。
请参阅以下内容:
我使用的查询如下:
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天不间断。
我错过了什么?
答案 0 :(得分:1)
您想要来自TABLE_B的数据吗?然后从中进行选择,并在where子句中的其他表中具有条件。
其他表上的内连接用作存在测试,我假设?不要这样做。您只需将您的记录相乘,就像您现在所做的那样,只是为了以后必须解除重复。这可能会导致大型表的性能下降和更复杂的查询中的错误。请改用EXISTS
或IN
。
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
上加入两个表B
和id
。您只需要表B
和表B
中的列`id&#39;列是唯一标识符。
即便如此,如果在表A
中id
(相同的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记录。