查找不存在的数据

时间:2018-08-03 10:23:30

标签: sql sql-server

让我们说我对用户运行sql查询以返回联系人类型。 用户A返回三行:

555-1234

555-4321

userA@email.com

现在,我想查找没有电话号码但可能有电子邮件地址的用户。谁能给我关于我将如何开始的建议?如果需要更多信息,请询问。

编辑:很抱歉,当前正在移动。稍后将发布有用的数据。现在,我可以说没有严格的专栏。例如,电话1,电话2,电子邮件。

它更开放,因为该列中当前包含一个字符串,因此可以包含电话号码或电子邮件。因此,某些用户在表中有几个条目,而有些用户可能只有一个。

我正在尝试找出如何查找没有电话号码条目的用户。希望这现在更有意义。

4 个答案:

答案 0 :(得分:1)

假设您只是说“没有电话”,因为没有这样的比较运算符“可能有”

单个表:

SELECT * FROM Usertable WHERE Phone1 IS NULL AND Phone2 IS NULL

用户+联系表:

SELECT * 
FROM Users U
WHERE NOT EXISTS (
          SELECT * 
          FROM Contacts C 
          WHERE U.UserID = C.UserID AND ContactType = 'Phone'
          )

答案 1 :(得分:1)

比方说,您有名为 User Contact 的表,对于一个用户,联系人表中有多个联系人。

使用以下查询查找没有电话号码但可能具有电子邮件地址的用户。

SELECT *
FROM User u
 JOIN Contact c ON u.userId = c.userId and c.contactType='Email'
WHERE NOT EXISTS (SELECT 1 FROM Contact c1 WHERE u.userId = c1.userID and c.contactType='Phone')

答案 2 :(得分:0)

使用空值检查和电子邮件列length进行检查,就像您所说的那样,这就是为什么我用空值或某些值进行检查的原因

select * from users where phone_number is null and (email is null or LEN(trim(email))>0)

答案 3 :(得分:0)

如果您只希望没有电话号码的用户:

select u.*
from users u
where not exists (select 1
                  from contact c
                  where u.userId = c.userId and
                        c.contactType = 'Phone'
                 );

您没有指定您实际上想要的电子邮件地址(如果有),因此这应该是吸引用户的最有效方法。