Sql 如何连接显示表A不在表B中的所有记录的两个表
我有一个电子邮件营销网络应用程序。我想显示(表B)中的哪些电子邮件联系人没有出现在EmailContacts_活动(表A)中。此外,我还希望通过“活动ID”字段筛选表A。当我运行下面的代码时,我得到0条记录,但我知道那里有几千条记录。谁能告诉我我把事情搞砸了吗Sql 如何连接显示表A不在表B中的所有记录的两个表,sql,Sql,我有一个电子邮件营销网络应用程序。我想显示(表B)中的哪些电子邮件联系人没有出现在EmailContacts_活动(表A)中。此外,我还希望通过“活动ID”字段筛选表A。当我运行下面的代码时,我得到0条记录,但我知道那里有几千条记录。谁能告诉我我把事情搞砸了吗 SELECT * FROM TableA LEFT JOIN TableB ON TableA.EmailContactId = TableB.EmailContactId WHERE TableA.CampaignId = 1 AN
SELECT * FROM TableA
LEFT JOIN TableB
ON TableA.EmailContactId = TableB.EmailContactId
WHERE TableA.CampaignId = 1
AND TableB.EmailContactId IS NULL
ORDER BY TableB.EmailContactId DESC
我想在EmailContact
表中显示所有未在EmailContactCampaign
表中显示的电子邮件联系人。以下是实际代码:
public List<EmailContact> GetNotAssignedContactsForCampaign(int campaignId)
{
string sqlCommand = "SELECT * FROM EmailContactCampaign LEFT JOIN EmailContact";
sqlCommand += " ON EmailContactCampaign.EmailContact_EmailContactId = EmailContact.EmailContactId";
sqlCommand += " WHERE EmailContactCampaign.EmailContact_EmailContactId = " + campaignId.ToString() AND EmailContact.EmailContactId IS NULL ;
sqlCommand += " ORDER BY EmailContact.EmailContactId DESC";
var emailContacts = new List<EmailContact>();
string CS = db.Database.Connection.ConnectionString;
using (SqlConnection con = new SqlConnection(CS))
{
con.Open();
SqlCommand cmd = new SqlCommand(sqlCommand, con);
//Create sql datareader
using (SqlDataReader sqlDataReader = cmd.ExecuteReader())
{
while (sqlDataReader.Read())
{
var emailContact = new EmailContact();
emailContact.Assigned = ((bool)sqlDataReader["Assigned"]);
emailContact.Cell1 = _crypto.DecryptAndSanitize(sqlDataReader["Cell1"] as string);
emailContact.Cell2 = _crypto.DecryptAndSanitize(sqlDataReader["Cell2"] as string);
emailContact.City = _crypto.DecryptAndSanitize(sqlDataReader["City"] as string);
emailContact.Company = _crypto.DecryptAndSanitize(sqlDataReader["Company"] as string);
emailContact.EmailAddress = _crypto.DecryptAndSanitize(sqlDataReader["EmailAddress"] as string);
emailContact.EmailContactId = (int)sqlDataReader["EmailContactId"];
emailContact.FullName = _crypto.DecryptAndSanitize(sqlDataReader["FullName"] as string);
emailContact.Hold = (bool)sqlDataReader["Hold"];
emailContact.Phone1 = _crypto.DecryptAndSanitize(sqlDataReader["Phone1"] as string);
emailContact.Phone2 = _crypto.DecryptAndSanitize(sqlDataReader["Phone2"] as string);
emailContact.State = _crypto.DecryptAndSanitize(sqlDataReader["State"] as string);
emailContact.Status = (Status)sqlDataReader["Status"];
emailContact.Zip = _crypto.DecryptAndSanitize(sqlDataReader["Zip"] as string);
emailContacts.Add(emailContact);
}
}
return (emailContacts);
}
}
public List getnotassignedcontactsforcompaign(int-activitid)
{
string sqlCommand=“选择*来自EmailContactCampaign LEFT加入EmailContact”;
sqlCommand+=“ON-EmailContactCampaign.EmailContact\u EmailContactId=EmailContact.EmailContactId”;
sqlCommand+=“其中EmailContactCampaign.EmailContact_EmailContactId=“+campaignId.ToString()和EmailContact.EmailContactId为空;
sqlCommand+=“按EmailContact.EmailContactId描述订购”;
var emailContacts=新列表();
字符串CS=db.Database.Connection.ConnectionString;
使用(SqlConnection con=newsqlconnection(CS))
{
con.Open();
SqlCommand cmd=新的SqlCommand(SqlCommand,con);
//创建sql数据读取器
使用(SqlDataReader SqlDataReader=cmd.ExecuteReader())
{
while(sqlDataReader.Read())
{
var emailContact=新的emailContact();
emailContact.Assigned=((bool)sqlDataReader[“Assigned”]);
emailContact.Cell1=\u crypto.DecryptAndSanitize(sqlDataReader[“Cell1”]作为字符串);
emailContact.Cell2=\u crypto.DecryptAndSanitize(sqlDataReader[“Cell2”]作为字符串);
emailContact.City=_crypto.decryptandsonize(sqlDataReader[“City”]作为字符串);
emailContact.Company=_crypto.decryptandsonize(sqlDataReader[“Company”]作为字符串);
emailContact.EmailAddress=\u crypto.DecryptAndSanitize(sqlDataReader[“EmailAddress”]作为字符串);
emailContact.EmailContactId=(int)sqlDataReader[“EmailContactId”];
emailContact.FullName=\u crypto.DecryptAndSanitize(sqlDataReader[“FullName”]作为字符串);
emailContact.Hold=(bool)sqlDataReader[“Hold”];
emailContact.Phone1=\u crypto.DecryptAndSanitize(sqlDataReader[“Phone1”]作为字符串);
emailContact.Phone2=\u crypto.DecryptAndSanitize(sqlDataReader[“Phone2”]作为字符串);
emailContact.State=_crypto.decryptandsonize(sqlDataReader[“State”]作为字符串);
emailContact.Status=(Status)sqlDataReader[“Status”];
emailContact.Zip=_crypto.decryptandsonize(sqlDataReader[“Zip”]作为字符串);
emailContacts.Add(emailContact);
}
}
返回(电子邮件联系人);
}
}
您试过这个吗
SELECT * FROM tableB WHERE EmailContactId NOT IN (SELECT EmailContactId FROM tableA)
我认为您得到0可能是因为这
和TableB.EmailContactId为NULL
请试试这个
SELECT * FROM TableA
LEFT JOIN TableB
ON TableA.EmailContactId = TableB.EmailContactId
WHERE TableA.CampaignId = 1
ORDER BY TableB.EmailContactId DESC
对不起,我的问题不够清楚。做了一些挖掘,在另一篇帖子上找到了答案。对不起,我不小心把它关了,再也找不到了。无论如何,这是我的实现
SELECT * FROM EmailContact
WHERE NOT EXISTS
(SELECT * FROM EmailContactCampaign WHERE EmailContactCampaign.EmailContact_EmailContactId = EmailContact.EmailContactId AND EmailContactCampaign.Campaign_CampaignId = 1)
如果我正确理解了您的问题,您正在查找不在A中的B。但您的查询将返回不在B中的A。将其转过来(
tableB left join tableA,其中A…为NULL
)您的问题在于您的查询方式错误:您的查询将返回EmailContactCampaign
中不在EmailContact
中的所有联系人
您的问题的正确解决方案如下所示:
SELECT * FROM EmailContact
WHERE EmailContactId NOT IN (
SELECT EmailContact_EmailContactId FROM EmailContactCampaign
WHERE Campaign_CampaignId = ?
)
ORDER BY EmailContact.EmailContactId DESC
你的问题中是否有关于
SELECT*FROM TableA
的引文,或者这是打字错误?