【问题标题】:How do I insert values into a table with a column-wise uniqueness check?如何通过按列唯一性检查将值插入表中?
【发布时间】:2020-12-20 23:20:57
【问题描述】:

创建表

CREATE TABLE `my_table`
(
    id Uint64,
    name String,
    PRIMARY KEY (id)
);

插入值

INSERT INTO `my_table`
    ( id, name )
VALUES (1, 'name1'),
       (2, 'name2'),
       (3, 'name3');
# id name
0 1 "name1"
1 2 "name2"
2 3 "name3"

如何add VALUES(4, 'name1') 跳过add VALUES(3, 'name1')?

这里描述了可用的语法:https://cloud.yandex.com/docs/ydb/yql/reference/syntax/insert_into

【问题讨论】:

  • 听起来您希望id 是独一无二的。你的桌子已经这样做了。
  • 如果我插入 VALUES (3, 'name1') 然后我得到错误 Operation aborted due to constraint violation: insert_pk
  • 您必须使用 VALUES 插入它们吗?
  • 是的,我正在添加一个新值,我不知道它是否在表格中。

标签: sql


【解决方案1】:

从您在 cmets 中提供的文档链接中,我看到您使用的数据库不支持等效于 INSERT OR IGNORE... 的语句,以在违反唯一约束时抑制错误。

您也可以使用INSERT ... SELECT

如果你的数据库支持EXISTS:

INSERT INTO my_table
SELECT 3, 'name1'
WHERE NOT EXISTS (SELECT * FROM my_table WHERE id = 3); 

或者你可以使用LEFT JOIN:

INSERT INTO my_table
SELECT t.id, t.name
FROM (SELECT 3 AS id, 'name1' AS name) AS t
LEFT JOIN my_table AS m 
ON m.id = t.id
WHERE m.id IS NULL;

【讨论】:

  • EXISTS 不支持 LEFT JOIN 我正在寻找的内容无法正确写入
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 1970-01-01
  • 2021-08-09
  • 2017-03-30
  • 2011-03-18
相关资源
最近更新 更多