SQL-仅当B不';不存在
我有一条SQL语句(经过修改,因为真正的查询是巨大的): 我得到一张大致如下的桌子:SQL-仅当B不';不存在,sql,Sql,我有一条SQL语句(经过修改,因为真正的查询是巨大的): 我得到一张大致如下的桌子: || IDNum || PrimaryAddress || ----------------------------- || 01234 || 1 || || 23456 || 1 || || abcde || 0 || || abcde || 1 || || zyxwv || 0
|| IDNum || PrimaryAddress ||
-----------------------------
|| 01234 || 1 ||
|| 23456 || 1 ||
|| abcde || 0 ||
|| abcde || 1 ||
|| zyxwv || 0 ||
我需要一种方法来返回PrimaryAddress为1的所有记录,以及PrimaryAddress为0且IDNum尚未返回PrimaryAddress为1的所有记录。i、 e.在上面的例子中,(abcde | | 0)应该被排除在外,因为(abcde | | 1)存在。在这种情况下,一个简单的
分组方式
应该适用于您试图做的事情。实际上,您是说希望所有IDNum值都显示一次,PrimaryAddress值对应于最高值(如果存在,则为1,如果不存在,则为0)
假设您需要保留原始查询,因为您正在使用它进行其他工作,您可以使用:
SELECT IDNum, MAX(PrimaryAddress) AS PrimaryAddress
FROM
(
select tblInfo.IDNum, tblAddress.PrimaryAddress
from tblInfo
join tblAddress
on tblInfo.Agent = tblAddress.Agent
where (some stuff)
)
GROUP BY IDNum
这应该适用于MS SQL Server和Oracle,但不一定适用于其他DBMS。如果嵌套查询在您使用的DBMS中不起作用,您应该能够用第一次查询的结果填充一个临时表,然后对该表执行分组。使用
不存在
SELECT tblInfo.IDNum, tblAddress.PrimaryAddress
FROM tblInfo
INNER JOIN tblAddress
ON tblInfo.Agent = tblAddress.Agent
WHERE tblAddress.PrimaryAddress = 1
OR ( tblAddress.PrimaryAddress = 0 AND NOT EXISTS
(
SELECT 1 FROM tblInfo t2 INNER JOIN tblAddress a2 ON t2.Agent = a2.Agent
WHERE t2.IDNum = tblInfo.IDNum AND a2.PrimaryAddress = 1
)
)
我希望这有帮助
select * from tblAddress mainTBL
where mainTBL.primaryaddress = (Case when EXISTS(select t1.IDNUM from tblAddress t1 where
mainTBL.IDNUM = t1.IDNUM AND t1.primaryAddress = 1) THEN 1 ELSE 0 END)
检查您使用的是什么数据库管理系统?最有效的方法可能因DBMS而异。IDNum可以有多个主地址吗?
select * from tblAddress mainTBL
where mainTBL.primaryaddress = (Case when EXISTS(select t1.IDNUM from tblAddress t1 where
mainTBL.IDNUM = t1.IDNUM AND t1.primaryAddress = 1) THEN 1 ELSE 0 END)