【问题标题】:Use of AND in Case statements in MYSQL在 MYSQL 中的 Case 语句中使用 AND
【发布时间】:2015-05-18 15:27:20
【问题描述】:

好的,此查询的目的是检查表 2 中是否存在记录,如果确实将类型更新为重复,如果不存在,则将其更新为原始记录。我必须检查三个字段,并且所有字段都必须为 true 才有资格作为重复条目。

此时,它确实检查了正确的表,查找是否有重复,并将我测试的所有 9 条记录的状态从 1 更改为 2,但是,它只是将第一条记录更改为“重复”即使它们都是重复的。

我可以在 case 语句中使用“AND”吗?如果没有,是否有人建议我如何更改此查询以使其正常工作?我尝试过使用 SELECT 子查询,但没有奏效。

代码如下:

$query = "UPDATE first_table f
    LEFT
    JOIN second_table s
      ON f.co_id = s.co_id
     SET f.status = 2, f.type = 
        CASE 
            WHEN s.ltt = f.ltt
            AND s.lang = f.lang 
            AND s.units = f.units
        THEN 'duplicate' ELSE 'original' 
        END
   WHERE f.co_id = :coid AND f.type = :rtype AND f.status = :status";
    $params = array();
    $params[] = array(':coid', $co_id, 'int');
    $params[] = array(':rtype', 'uploads', 'str');
    $params[] = array(':status', '1', 'int');
    $db->query($query, $params);

【问题讨论】:

  • 看这里:stackoverflow
  • 我刚做了。他们在 select 中使用 case 来选择一个项目,但它确实表明“And”是可以接受的。这回答了一点点,但仍然给我留下了一个问题,为什么它只更新第一个要复制的内容,而将其余部分保留为原始内容,即使它们都是重复的。我确定这是我的查询中的某些内容我做错了,但 CASE 对我来说相当新……而且我看不到它。
  • imo 你可以使用 AND。您是否尝试对整个 CASE 结构使用括号?否则 sqlfiddle 会有所帮助
  • 谢谢,我先试试括号,如果不行的话……看看 sqlfiddle。我感谢您的意见

标签: php mysql case


【解决方案1】:

我设法使用了 Ali Arshad 和 sqlfiddle 的一些建议......并想出了解决方案!

 $query = "UPDATE first_table f
LEFT
JOIN second_table s
  ON f.co_id = s.co_id
 SET f.status = 2, f.type = 
    CASE 
        WHEN (SELECT f.prop_id FROM first_table f 
                WHERE s.ltt = f.ltt AND s.lang = f.lang 
                AND s.units = f.units)
    THEN 'duplicate' ELSE 'original' 
    END
WHERE f.co_id = :coid AND f.type = :rtype AND f.status = :status";
$params = array();
$params[] = array(':coid', $co_id, 'int');
$params[] = array(':rtype', 'uploads', 'str');
$params[] = array(':status', '1', 'int');
$db->query($query, $params);

【讨论】:

    【解决方案2】:

    也许你看起来像下面的链接,

    http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

    此命令使用您定义的定义同时自动进行插入和更新。

    【讨论】:

    • 那会很好,但我们还需要记录第一个表中的重复内容等。我给出的答案满足了我们的所有需求。
    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    相关资源
    最近更新 更多