示例: 由唯一名称和电子邮件地址键入的表,其中包含类型列 类型列可以有原始、工作、个人 您可以有多个工作和个人电子邮件,但只能有 1 个原始电子邮件 我正在使用 DB2 for i SQL,我想使用 UNIQUE 或 CHECK 约束来约束数据,但不确定如何处理此数据集。
Scott <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="0172626e757541696e756c60686d2f626e6c" rel="noreferrer noopener nofollow">[email protected]</a> Original
Scott <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ea9989859e9eaa8d878b8386c4898587" rel="noreferrer noopener nofollow">[email protected]</a> Personal
Scott <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="98ebfbf7ececd8f4f1eefdb6fbf7f5" rel="noreferrer noopener nofollow">[email protected]</a> Personal
Scott <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1c6f7f7368685c525e5f327f7371" rel="noreferrer noopener nofollow">[email protected]</a> Work
Scott <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="85f6e6eaf1f1c5c4c7c6abe6eae8" rel="noreferrer noopener nofollow">[email protected]</a> Work
Scott <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7506161a0101350c141d1a1a5b161a18" rel="noreferrer noopener nofollow">[email protected]</a> Original
我想确定,如果我已经将 hotmail 作为原始邮件,我就不能将 yahoo 作为原始邮件。 其余均有效。
如果我需要添加更多内容,请告诉我。
最佳答案
如果您有用于 IBM i 的 Db2,那么您可以创建一个 UNIQUE INDEX与相应的 WHERE
子句。
CREATE TABLE TEST_IND_EXPR
(
NAME VARCHAR (20) NOT NULL
, EMAIL VARCHAR (20) NOT NULL
, TYPE VARCHAR (20) NOT NULL
);
CREATE UNIQUE INDEX TEST_IND_EXPR1 ON TEST_IND_EXPR (NAME, EMAIL);
CREATE UNIQUE INDEX TEST_IND_EXPR2 ON TEST_IND_EXPR (NAME, TYPE) WHERE TYPE = 'Original';
INSERT INTO TEST_IND_EXPR VALUES ('Scott', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e79484889393a78f88938a868e8bc984888a" rel="noreferrer noopener nofollow">[email protected]</a>', 'Original');
INSERT INTO TEST_IND_EXPR VALUES ('Scott', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dfacbcb0abab9fb8b2beb6b3f1bcb0b2" rel="noreferrer noopener nofollow">[email protected]</a>', 'Personal');
INSERT INTO TEST_IND_EXPR VALUES ('Scott', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="6013030f1414200c0916054e030f0d" rel="noreferrer noopener nofollow">[email protected]</a>', 'Personal');
INSERT INTO TEST_IND_EXPR VALUES ('Scott', '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1261717d6666526b737a7d7d3c717d7f" rel="noreferrer noopener nofollow">[email protected]</a>', 'Original');
最后一个语句返回 SQL0803
,因为该行违反了 TEST_IND_EXPR2
索引的唯一性。
关于sql - 我需要验证表中的数据,其中 1 列有多个值,但 1 个值只能通过唯一键出现在 1 行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73501979/