sql - 将单个 SQL Server 查询合并为 1 个查询
问题描述
我尝试将三个 SQL Server 查询合并为一个查询。我是这个级别的 SQL 的新手,但这是我的三个查询
SELECT detail.map_id
, parcel.dsc_cd
, CASE WHEN ISNULL(parcel.dsc_cd, '') <> ''
THEN (select dscr from lu_dsc where cd = parcel.dsc_cd)
ELSE ''
END AS Name
, parcel.nh_cd
, parcel.strap
, parcel.dor_cd
, detail.sub
, detail.section
, detail.township
, detail.range
, detail.acreage
, detail.sqft
FROM parcel
INNER JOIN detail ON parcel.strap = detail.strap
WHERE parcel.status_cd = 'A'
AND (detail.map_id NOT IN (null,'','A','B','BE','BW','C','L','LL','MX','O','P','U')
OR parcel.nh_cd IN (NULL,'0.00')
OR parcel.dor_cd IN (NULL,'')
OR detail.sub IN (NULL,'')
OR detail.section IN (NULL,'')
OR detail.township IN (NULL,'')
OR detail.range IN (NULL,'')
OR detail.acreage < 0
OR detail.sqft < 0)
AND parcel.dor_cd NOT IN ('POSS', 'ALN')
SELECT detail.map_id MAP_ID
, parcel.nh_cd NBHD
, parcel.dor_cd DOR_CD
, detail.strap ACCOUNTNO
, detail.mkt_ar_2 LAND_MRKT
, detail.mkt_ar_1 ECON_AREA
FROM detail
INNER JOIN parcel ON detail.strap = parcel.strap
WHERE parcel.status_cd = 'A'
AND detail.mkt_ar_1 IN (NULL,'0')
SELECT TOP 100000 detail.map_id, parcel.strap, parcel.dor_cd, parcel.status_cd
FROM parcel INNER JOIN detail ON parcel.strap = detail.strap
WHERE (parcel.status_cd = 'A ')
AND NOT EXISTS (select 1 from legal_ln where legal_ln.strap = parcel.strap)
这就是我到目前为止所拥有的。它运行没有任何错误,但它没有提取更正信息。我知道查找 detail.mkt_ar_1 的查询应该有一些结果。
SELECT detail.map_id
, CASE WHEN ISNULL(parcel.dsc_cd, '') <> ''
THEN (select dscr from lu_dsc where cd = parcel.dsc_cd)
ELSE ''
END AS Name
, parcel.nh_cd
, parcel.strap
, parcel.dor_cd
, detail.mkt_ar_1
, detail.sub
, detail.section
, detail.township
, detail.range
, detail.acreage
, detail.sqft
FROM parcel
INNER JOIN detail ON parcel.strap = detail.strap
WHERE parcel.status_cd = 'A'
AND ((detail.map_id NOT IN (null,'','A','B','BE','BW','C','L','LL','MX','O','P','U')
OR parcel.nh_cd IN (NULL,'0.00')
OR parcel.dor_cd IN (NULL,'')
OR detail.sub IN (NULL,'')
OR detail.section IN (NULL,'')
OR detail.township IN (NULL,'')
OR detail.range IN (NULL,'')
OR detail.acreage < 0
OR detail.sqft < 0
OR detail.mkt_ar_1 IN (NULL,'0'))
AND parcel.dor_cd NOT IN ('POSS', 'ALN'))
AND NOT EXISTS (select 1 from legal_ln where legal_ln.strap = parcel.strap)
我如何以这样的方式编写它以运行每个查询?任何有关格式的建议也将不胜感激。
解决方案
结合WHERE
条款...
WHERE
(
parcel.status_cd = 'A'
AND parcel.dor_cd NOT IN ('POSS', 'ALN')
AND
(
detail.map_id NOT IN (null,'','A','B','BE','BW','C','L','LL','MX','O','P','U')
OR parcel.nh_cd IN (NULL,'0.00')
OR parcel.dor_cd IN (NULL,'')
OR detail.sub IN (NULL,'')
OR detail.section IN (NULL,'')
OR detail.township IN (NULL,'')
OR detail.range IN (NULL,'')
OR detail.acreage < 0
OR detail.sqft < 0
)
)
OR
(
parcel.status_cd = 'A'
AND detail.mkt_ar_1 IN (NULL,'0')
)
OR
(
parcel.status_cd = 'A '
AND NOT EXISTS (select 1 from legal_ln where legal_ln.strap = parcel.strap)
)
也就是说,我不认为你会得到你认为的NULL
s 行为,例如......
'x' NOT IN (NULL, 'y', 'z') => Does NOT return TRUE, because of the NULL
NULL IN (NULL, '') => Does NOT return TRUE, because NULL never equals anything, even another NULL
推荐阅读
- math - 如何在知道 0 点值的情况下缩放两个范围?
- ios - 是否可以更改从 NSURLSessionDelegate:didReceiveChallenge() 生成的重试请求的 HTTP 标头?
- c++ - 使用 Matlab Coder 将 Matlab 代码转换为 C++ - 单元问题
- c# - 在 Azure DevOps 上生成错误但不是本地错误
- mysql - MySQL远程连接需要超过3分钟才能显示结果
- java - 如何将 @SuppressWarning("unchecked") 用于特定的代码行而不是方法级别
- python - matplotlib 中不需要的白色列 - 如何删除?
- java - 使用 Spring Security 的仅用户名身份验证
- docker - 从 docker-compose.yml 配置搬运工(-ce)
- c# - 我如何将数据表从 .net core 5.0 web api 作为 json 传递到 angular 前端?