【问题标题】:Update column based on if a join exists - SQLITE根据连接是否存在更新列 - SQLITE
【发布时间】:2015-11-04 21:23:37
【问题描述】:

我似乎无法在 SQLITE 中使用它。

如果某行存在匹配的连接,我尝试添加 1,否则添加 0。

我认为代码会为那些匹配的行添加一个 1,但它只是给所有匹配的行添加一个 1:

update tbl1
SET has_data = 1
where exists(
    SELECT *
    FROM tbl1
    join tbl2 on tbl2.r_num = tbl1.r_num
)

我看到了一些'case's示例,我不知道如何编写在这种情况下可能对应用 0 或 1 有用?

感谢您的帮助!

【问题讨论】:

    标签: join sqlite sql-update


    【解决方案1】:

    子查询中的tbl1 是表的一个独立实例,因此如果tbl1 中有someanywhere 匹配,则EXISTS 为真。

    要引用原始表,不要引入另一个表实例:

    UPDATE tbl1
    SET has_data = 1
    WHERE EXISTS (SELECT *
                  FROM tbl2
                  WHERE r_num = tbl1.r_num);
    

    或者,这可以写成:

    UPDATE tbl1
    SET has_data = 1
    WHERE r_num IN (SELECT r_num
                    FROM tbl2);
    

    【讨论】:

    • 非常感谢您的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多