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