Sql 查找非';不在那里

Sql 查找非';不在那里,sql,sql-server,Sql,Sql Server,假设我对用户运行sql查询以返回联系人类型。 用户A返回三行: 555-1234 555-4321 userA@email.com 现在我想找到没有电话号码但可能有电子邮件地址的用户。有谁能给我一些建议,告诉我如何着手做这件事?如果需要更多信息,请询问 编辑:抱歉,当前正在移动中。稍后将发布有用的数据。现在我可以说没有严格的列。例如,电话1,电话2,电子邮件 它更开放,因为在列中,当前需要一个字符串,以便它可以有一个电话号码或电子邮件。因此,有些用户在表中有多个条目,而有些用户可能只有一个

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

555-1234

555-4321

userA@email.com
现在我想找到没有电话号码但可能有电子邮件地址的用户。有谁能给我一些建议,告诉我如何着手做这件事?如果需要更多信息,请询问

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

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

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

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

单表:

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'
          )
假设您的意思只是“没有电话”,因为没有这样的比较运算符“可能有”

单表:

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'
          )

使用空检查和电子邮件列
length
check,正如您所说的may email,这就是我使用空或某些值进行检查的原因

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

使用空检查和电子邮件列
length
check,正如您所说的may email,这就是我使用空或某些值进行检查的原因

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

比方说,您有名为UserContact的表,对于一个用户,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')

比方说,您有名为UserContact的表,对于一个用户,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')

如果您只想要没有电话号码的用户:

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

您没有指定实际需要的电子邮件地址(如果有),因此这应该是获取用户的最有效方式。

如果您只需要没有电话号码的用户:

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

您没有指定您实际需要的电子邮件地址(如果有),因此这应该是获取用户的最有效方式。

我真的不明白,您需要找到电话号码为空但有电子邮件的用户?您能显示示例数据和预期结果吗?显示您的DDL表和您使用的查询。使用(与SqlServer一起)创建一个可在线创建这些精确结构的数据库,用testdata填充它并发布。阅读我真的不明白,您需要查找电话号码为空但有电子邮件的用户?能否显示示例数据和预期结果?显示您的表DDL和您使用的查询。使用(与SqlServer一起)创建一个可在线创建这些精确结构的,用testdata填充并发布的。阅读,谢谢。阅读你的答案完全解决了我的问题。我想了很久,试着走了一条奇怪的路线,在那里我只寻找数字等等。我没有想到要使用类型字段。再次感谢。很高兴能帮助你……)@JimmyPop13我知道你得到了答案,但下次你想知道字符串是电子邮件还是只搜索
@
symbol:DThanks。阅读你的答案完全解决了我的问题。我想了很久,试着走了一条奇怪的路线,在那里我只寻找数字等等。我没有想到要使用类型字段。再次感谢。很高兴能帮助你……)@JimmyPop13我知道您已经得到了答案,但下次您想知道字符串是电子邮件还是仅搜索
@
符号:D