Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 一个执行多个WHERE语句的大查询_Sql_Where - Fatal编程技术网

Sql 一个执行多个WHERE语句的大查询

Sql 一个执行多个WHERE语句的大查询,sql,where,Sql,Where,我有116种不同的顶点/地理代理组合的列表,我必须确保它们是成对的。例如,这里是我的116列表中的一小部分 AGNT Vertex/Geo 5040 440292570 2010 440390000 1010 440390060 1180 440390246 1800 440390570 1130 440391110 1830 440391680 1410 440395020 1060 440397460 2000 4403996

我有116种不同的顶点/地理代理组合的列表,我必须确保它们是成对的。例如,这里是我的116列表中的一小部分

AGNT    Vertex/Geo
5040    440292570
2010    440390000
1010    440390060
1180    440390246
1800    440390570
1130    440391110
1830    440391680
1410    440395020
1060    440397460
2000    440399685
1460    440399687
2020    440710000
1030    440710210
我一直在使用这个查询逐个检查每一对。换句话说,我必须不断更改agnt_hse和VRTX_地理编码_hse,以检查每一对是否正确

USE ExternalUser

SELECT  distinct HSE_KEY_HSE AS HOUSE_KEY, AGNT_HSE AS AGENT, VRTX_GEOCODE_HSE as GEOCODE

FROM        ExternalUser.Vantage.HSE_BASE 
      INNER JOIN externaluser.Vantage.HSL_LOB ON HSE_KEY_HSE = HSE_KEY_HSL 
      LEFT JOIN externaluser.Vantage.HSM_MEMO ON HSE_KEY_HSE = HSE_KEY_HSM

WHERE MEMO_NO_HSM = 1 
And sys_hsl = '8777' 
And sys_hsm = '8777'
And delivery_segment_id_hsl = 'C' 
And agnt_hse in ('5040') and VRTX_GEOCODE_HSE != '440292570'
有没有一种方法可以同时运行多个查询

我熟悉UNION命令,但觉得有一种方法可以进一步压缩编码,因为如果我被迫使用UNION命令,我将粘贴一个超过100倍的大型查询

我在想一些关于

WHERE MEMO_NO_HSM = 1 
And sys_hsl = '8777' 
And sys_hsm = '8777'
And delivery_segment_id_hsl = 'C' 
And agnt_hse in ('5040') and VRTX_GEOCODE_HSE != '440292570' 
Then agnt_hse in ('2010') and VRTX_GEOCODE_HSE != '440390000' 
Then agnt_hse in ('1010') and VRTX_GEOCODE_HSE != '440390060' 
...etc
也许我把这一切都搞错了,有不同的方式来运行查询吗?
非常感谢您提供的任何信息。

看起来您正试图从您提供的列表中获取例外情况。也就是说,与代理匹配但具有不同顶点的所有行

如果可能的话,我会使用列表的显式辅助表来表达这个查询,或者使用CTE构造一个查询。以下是CTE版本:

with pairs as (
      select '5040' as agent, '440292570' as vertex union all
      select '2010', '440390000'
      . . .
     )
SELECT distinct HSE_KEY_HSE AS HOUSE_KEY, AGNT_HSE AS AGENT, VRTX_GEOCODE_HSE as GEOCODE
FROM  ExternalUser.Vantage.HSE_BASE INNER JOIN
      externaluser.Vantage.HSL_LOB
      ON HSE_KEY_HSE = HSE_KEY_HSL LEFT JOIN 
      externaluser.Vantage.HSM_MEMO
      ON HSE_KEY_HSE = HSE_KEY_HSM join
      pairs p
      on p.agent = agnt_hse
WHERE MEMO_NO_HSM = 1 And
      sys_hsl = '8777' And
      sys_hsm = '8777' And
      delivery_segment_id_hsl = 'C' and
      (p.Vertex <> VRTX_GEOCODE_HSE)

您没有指定RBDM,因此我将给出一个通用示例。该原则应该适用于大多数数据库引擎,但您可能需要更改语法。我还假设agnt_hse和vertx_geocode_hse是整数。如果这一假设是错误的,那么所需的改变应该是显而易见的

select yourfields
from yourtables
where concat(to_char(agnt_hse), to_char(vertx_geocode_hse)) in
(select concat(to_char(agnt_hse), to_char(vertx_geocode_hse))
from TheTablesYouAreLookingAt
minus 
select concat(to_char(agnt_hse), to_char(vertx_geocode_hse))
from TheTablesWithTheCorrectData)

谢谢@Gordon的回复。是的,我正在尝试查找代理与其顶点不匹配的情况。我尝试在代码中添加更多对,例如选择“5040”作为代理,“440292570”作为顶点联合所有选择“2010”,“440390000”选择“1010”,“440390060”选择不同的HSE_密钥作为房屋密钥,AGNT_HSE作为代理,@LLL。除第一次选择外,每次选择前都需要一个union all。