sql - 识别 SQL 列更新的业务逻辑
问题描述
我有一个称为行数的 SQL 表contacts
,n
其中 n 超过 10Lakh(100 万)行。
下面是带有虚拟数据的表结构
+---------------+------------+---------+-----------+---------+------------------------+
| email | department | title | state | country | cleansing_verification |
+---------------+------------+---------+-----------+---------+------------------------+
| xyz@email.com | h.r. | sr. Exe | telangana | Ind | - |
+---------------+------------+---------+-----------+---------+------------------------+
所以,我有 4 个调度程序来清理上表中存在的数据,即
- 部门清洁剂
- 标题清洁剂
- 状态清洁剂
- 乡村清洁剂
每个清洁器都会更新相应列的数据。我又添加了一个列调用cleansing_verification
来确定哪一列已更新但无法正确使用。
任何清洁剂都可以触及一封电子邮件。这意味着所有 4 都可以更新值或任何 3 或任何 2 或仅 1。
所以,我面临的问题是如何识别哪些电子邮件被触及,哪些未被触及,以便我可以发送电子邮件通知。
如果有更多需要让我知道,我会在问题中添加。
提前致谢。
解决方案
所以通常我们不会在数据库设计领域这样做,但您可以使用位域。所以你cleansing_verification
是一个BIT(4)
类型列,每个清洁剂都有一些他们可以设置的:
- 部门 =
B'1000'
- 标题=
B'0100'
- 状态 =
B'0010'
- 国家 =
B'0001'
当运行 ie state 时,你会:
UPDATE contacts
SET cleansing_verification = cleansing_verification | B'0010'
WHERE -- whatever conditions you want to apply
如果您想检查给定清理程序更新了哪些行,请检查该位是否已设置,例如状态:
SELECT * FROM contacts WHERE cleansing_verification & B'0010' = B'0010'
实际上正确的方法是引入一个带有外键的新contacts
表和一个用于清洁器的列,例如(quick'n'dirty example):
CREATE TABLE contacts_verification
(
contact_id int references contacts(id),
cleanser int
)
然后,如果您想标记一条记录,您只需插入联系人 ID 和某种清洁剂标识(1、2、3、4),或者如果您真的需要,您可以使用文本字段和有意义的名称:
INSERT INTO contacts_verification (contact_id, cleanser) VALUES (21386, 1)
然后只需使用JOIN
来取回由清洁器标记的记录:
SELECT c.*
FORM contacts c
JOIN contacts_verification dep_verify
ON dep_verify.contact_id = c.id
AND dep_verify.cleanser = 1
推荐阅读
- apache-spark - 在pyspark数据框中根据group by连接行值
- java - 为什么 public void disableShortcuts (List
shortcutIds) 不适用于静态快捷方式 - python - ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型 numpy.ndarray)。在 jupyternotebook
- django-rest-framework - 尝试在序列化程序“ProfileSerializer”上获取字段“bio”的值时出现 AttributeError
- server-side-rendering - 斯巴达克斯店面消息中的 SSR
- node.js - Typescript - 从基类中的静态方法实例化子类,使用 args 并引用其他静态方法
- three.js - 使用 Cannon.js 时如何修复爆炸的端到端约束?
- python - RESNET50 重塑的输入是一个具有 1638400 个值的张量,但需要 25088 的倍数
- reactjs - TypeError:_this2.props.value.forEach 不是函数
- r - 用于过滤给定结果的显着单核苷酸多态性 (SNP) 的特征选择算法