【问题标题】:compare two columns in the same table and update a new column with results比较同一个表中的两列并用结果更新一个新列
【发布时间】:2013-11-18 10:36:08
【问题描述】:

我有一张名为 table1 的表
它有两个字段,分别称为“name1”和“name2”
我想将这两列相互比较 如果 name1 的值在 name2 中不存在,我想知道用新的标志列填充,反之亦然

table1 : 
----
name1  name2
----
jack   wheile
--
james  jack
--

>        
sample output : 
--
name1  name2   flag
--
jack   wheile  jack exist in column2
--
james  jack    jack exist in column1
--

有什么帮助吗?

【问题讨论】:

  • 行 (jack,jack) 的 flag 字段是什么?
  • 是或任何名称存在于第 1 列和第 2 列中

标签: sql ms-access ms-access-2007


【解决方案1】:

试试这个查询:

UPDATE TABLE1 SET FLAG = CONCAT('exist in ', IF(NAME1 LIKE '%jack%', column1, column2)) 
WHERE NAME1 LIKE '%jack%' OR NAME2 LIKE '%jack%';

【讨论】:

  • 对不起,这是mysql sintaxis。
【解决方案2】:

如果从 Access 自身内部执行,该查询应该会获得所需的结果

UPDATE table1 SET
    flag = Switch(DCount("*", "table1", "[name2]=""" & Replace([name1], """", """""") & """")>0, [name1] & " exists in column 2", DCount("*", "table1", "[name1]=""" & Replace([name2], """", """""") & """")>0, [name2] & " exists in column 1")

编辑:

或者,以下方法可以证明效率更高,但需要两个 UPDATE 查询

UPDATE table1 SET flag = [name1] & " exists in column 2"
WHERE 
    [name1] IN
        (
            SELECT x.name1 
            FROM 
                table1 AS x 
                INNER JOIN 
                table1 AS y 
                    ON x.name1 = y.name2
        )

UPDATE table1 SET flag = [name2] & " exists in column 1"
WHERE 
    [name2] IN
        (
            SELECT y.name2 
            FROM 
                table1 AS x 
                INNER JOIN 
                table1 AS y 
                    ON x.name1 = y.name2
        )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2014-05-16
    相关资源
    最近更新 更多