【发布时间】: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。我感谢您的意见