gpt4 book ai didi

sql-server - SQL : Find entries that don't exist

转载 作者:行者123 更新时间:2023-12-02 06:09:09 25 4
gpt4 key购买 nike

我知道这听起来倒退,但我正在寻找一种方法来搜索不包含特定字段的组的记录组。

我们从多家公司接收电子邮件数据,将数据解析到我们的数据库中,然后检索数据供我们使用。例如,一封电子邮件可能带有姓名、地​​址、城市、州、 zip 和电话。这些属性中的每一个都存储在不同的行中,这些行由一个共同的 email_id 关联(我知道这是多么低效,我继承了它并在不久的将来改变它)。

下面是一些行的例子:

ID         EmailID          Field_Name             Field_Value1234       4556             Name                   Joe Bob1235       4556             Address                123 Main St.1236       4556             City                   New York1237       4556             State                  New York1238       4556             Zip                    012341239       4556             Phone                  11122233331240       4557             Name                   Joe Bob1241       4557             Address                123 Main St.1242       4557             City                   New York1243       4557             State                  New York1244       4557             Zip                    01234(no phone field for email_id 4557 on purpose)

当我检索此数据时,我在 SELECT 语句(SELECT 名称、地址...)中指定了字段,并且最近开始出现“未找到电话字段”错误,我认为这意味着这些组之一的电子邮件没有输入“电话”字段。

我的困境是如何寻找丢失的东西。我希望能够运行一个查询,该查询将返回没有关联“电话”字段的任何电子邮件的电子邮件 ID。使用上述查询中的数据将返回电子邮件 ID 4557,因为它没有电话字段。

如果重要的话,我使用的是 MSSQL Server 8。

TIA,布莱恩

最佳答案

您可以使用 LEFT OUTER JOINNOT EXISTS 来获取违规记录。

左连接

SELECT  *
FROM YourTable yt
LEFT OUTER JOIN (
SELECT EmailID
FROM YourTable
WHERE Field_Name = 'Phone'
) yte ON yte.EmailID = yt.EmailID
WHERE yte.EmailID IS NULL

不存在

SELECT  *
FROM YourTable yt
WHERE NOT EXISTS (
SELECT EmailID
FROM YourTable
WHERE Field_Name = 'Phone'
AND yt.EmailID = EmailID
)

可以找到有关这两种方法的差异(相似性)的好读物 here

关于sql-server - SQL : Find entries that don't exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5406076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com