如何检查数据库中每个用户是不是存在行值

Posted

技术标签:

【中文标题】如何检查数据库中每个用户是不是存在行值【英文标题】:How to check is a row value exists for each user in the database如何检查数据库中每个用户是否存在行值 【发布时间】:2012-03-05 15:24:00 【问题描述】:

我正在创建一个跟踪客户联系的数据库,初始联系的目标联系日期是自客户第一次致电我们起的 90 个工作日,我创建了一个函数来处理此计算。

我有一个客户联系人日志表,所有联系人都输入到该表中。

我在 mssql2005 中设置了一个邮件脚本,当没有联系或在 90 天后输入日志时,它会向经理的电子邮件箱发送一个列表。

我正在努力使用 sql 来确定是否不存在联系人,或者是否存在但被破坏,请查看下面的脚本:

我已尝试使其尽可能具有可读性。

DECLARE @tmp INT 

SELECT m.id                                                          AS 
       [Case ID], 
       CONVERT(VARCHAR, userdbjhv25.dbo.Calcdate(oc.firstdate), 103) AS 
       [Target Contact Date] 
FROM   userdbjhv25.dbo.USER v, 
       userdbjhv25.dbo.customer o, 
       userdbjhv25.dbo.maincase m, 
       userdbjhv25.dbo.usercase vc, 
       userdbjhv25.dbo.customercase oc, 
       contactlist r 
WHERE  m.id = vc.caseid 
       AND v.userid = vc.userid 
       AND m.id = oc.caseid 
       AND o.customerid = oc.customerid 
       AND userdbjhv25.dbo.Calcdate(oc.firstdate) <= Getdate() 
       AND ( @tmp IS NOT NULL 
             AND NOT EXISTS (SELECT 1 
                             FROM   contactlist r1 
                             WHERE  r1.caseno = vc.usercase 
                                    AND r1.conlogtype = 'Initial Contact') 
              OR (( @tmp IN(SELECT 1 
                            FROM   contactlist r2, 
                                   usercase vc2, 
                                   USER v2, 
                                   customercase oc2, 
                                   maincase m2, 
                                   customer o2 
                            WHERE  m2.id = oc2.caseid 
                                   AND o2.customerid = oc2.customerid 
                                   AND r2.conlogtype = 'Initial Contact' 
                                   AND r2.caseno = vc.usercase 
                                   AND 
                           userdbjhv25.dbo.Calcdate(oc2.firstdate) < r2.postdate 
                           ) 
                  )) ) 

【问题讨论】:

dpriver.com/pp/sqlformat.htm 是你的朋友。 【参考方案1】:

我认为左连接将成为您的朋友。我无法充分可视化您的架构,但左(或右连接)背后的想法是数据可能不存在于其中一个数据集中。发生这种情况时,将返回一个充满空值的行。但是,当它匹配时,您会取回匹配的数据。所以,一些伪代码:

select m.id  AS [Case ID], 
       CONVERT(VARCHAR, userdbjhv25.dbo.Calcdate(oc.firstdate), 103) AS [Target Contact Date]
from userdbjhv25.dbo.customer o
left join userdbjhv25.dbo.customercase oc
    on o.customerid = oc.customerid
where oc.firstdate is null or datediff(day, oc.firstdate, getdate()) > 90

将此适应您的架构,您应该一切顺利。

【讨论】:

以上是关于如何检查数据库中每个用户是不是存在行值的主要内容,如果未能解决你的问题,请参考以下文章

如何检查用户名是不是存在于数据库中

Core Data - 如何检查用户是不是存在于数据库中?

如何检查某个数据是不是已存在于firestore中

检查用户名是不是存在于数据库中

如何检查用户是不是存在于数据库表中?

C# - 如何检查用户的输入是不是存在于组合框中(使用的数据绑定项)