Database 在中使用SQL查询。我想在EXISTS中转换查询

Database 在中使用SQL查询。我想在EXISTS中转换查询,database,Database,要将我的查询修改为存在 存在提高性能。加入可以更好地提高性能 SELECT lpn.TC_LPN_ID FROM LPN lpn WHERE lpn.inbound_Outbound_Indicator = 'O' AND lpn.tc_company_id = 1403 AND lpn.TC_REFERENCE_LPN_ID **IN** (SELECT l.tc_lpn_id FROM lpn

要将我的查询修改为存在


存在提高性能。

加入可以更好地提高性能

SELECT 
    lpn.TC_LPN_ID 
FROM LPN lpn 
WHERE lpn.inbound_Outbound_Indicator = 'O' 
    AND lpn.tc_company_id = 1403 
    AND lpn.TC_REFERENCE_LPN_ID **IN**  
        (SELECT 
            l.tc_lpn_id 
         FROM lpn l 
         WHERE l.TC_COMPANY_ID = 1403 
             AND l.inbound_Outbound_Indicator = 'I' 
             AND (l.tc_lpn_id= '000990950' OR l.TC_REFERENCE_LPN_ID = '000990950'))
您可以将查询表示为与自身的标准内部联接:

SELECT lpn.tc_lpn_id
  FROM lpn lpn
 WHERE lpn.inbound_outbound_indicator = 'O'
   AND lpn.tc_company_id = 1403
   AND EXISTS (
          SELECT 1
            FROM lpn l
           WHERE lpn.tc_reference_lpn_id = l.tc_lpn_id
             AND l.tc_company_id = 1403
             AND l.inbound_outbound_indicator = 'I'
             AND (   l.tc_lpn_id = '000990950'
                  OR l.tc_reference_lpn_id = '000990950'
                 ))

请注意,我删除了
lpn
对其本身的无意义的别名-即从lpn中删除
lpn
与从lpn中删除
完全相同:将表别名为其自己的名称没有任何效果。

是否确实存在可以提高性能?通常我会像瘟疫一样避免它,因为它取决于引擎。在MS Access中,In()条件有时比Exists()条件慢得多。在MS SQL中,查询优化器通常创建相同的执行计划(如果语句在其他方面相等)。
SELECT 
    lpn.TC_LPN_ID 
FROM LPN
JOIN lpn l
    ON l.TC_COMPANY_ID = lpn.l.TC_COMPANY_ID
    AND l.tc_lpn_id = lpn.TC_REFERENCE_LPN_ID
    AND l.inbound_Outbound_Indicator = 'I'
    AND l.tc_lpn_id = '000990950' OR l.TC_REFERENCE_LPN_ID = '000990950')
WHERE lpn.inbound_Outbound_Indicator = 'O' 
AND lpn.tc_company_id = 1403