我想修改查询。现在看起来像这样
<input type="checkbox" id="myCheck" onclick="myFunction()">
function myFunction() {
// Get the checkbox
var checkBox = document.getElementById("myCheck");
// Get the output text
var text = document.getElementById("text");
// If the checkbox is checked, display the output text
if (checkBox.checked == true){
text.style.display = "block";
} else {
text.style.display = "none";
}
}
现在它像数据库的1/3一样返回,并且我想将这些行的“ stan_zmiany”修改为3。由于我无法在Firebird中使用UPDATE FROM构造,所以我尝试了
SELECT EW_POLYLINE.P0_X, EW_POLYLINE.P0_Y, EW_POLYLINE.ID, EW_POLYLINE.STAN_ZMIANY, a.IDE, EW_POLYLINE.ID_WARSTWY
FROM EW_POLYLINE
LEFT JOIN (
SELECT EW_OBIEKTY.STATUS
, EW_OB_ELEMENTY.IDE
, EW_OB_ELEMENTY.TYP
FROM EW_OBIEKTY
INNER JOIN EW_OB_ELEMENTY
ON EW_OBIEKTY.UID = EW_OB_ELEMENTY.UIDO
WHERE EW_OBIEKTY.STATUS = 0 AND EW_OB_ELEMENTY.TYP <> 1
) as a ON EW_POLYLINE.ID = a.IDE
WHERE EW_POLYLINE.STAN_ZMIANY = 0 AND a.IDE Is Null
但是它更改了所有行的“ stan_zmiany”,而不是第一个查询中选择的行,您知道如何解决此问题吗?
答案 0 :(得分:1)
您存在的子查询是不相关的子查询,这意味着它不依赖于更新记录中的值。
相反,使用
update EW_POLYLINE
set stan_zmiany = 3
where EW_POLYLINE.STAN_ZMIANY = 0
and NOT EXISTS (
SELECT 1
FROM EW_OBIEKTY
INNER JOIN EW_OB_ELEMENTY
ON EW_OBIEKTY.UID = EW_OB_ELEMENTY.UIDO
WHERE EW_OBIEKTY.STATUS = 0 AND EW_OB_ELEMENTY.TYP <> 1
AND EW_OB_ELEMENTY.IDE = EW_POLYLINE.ID
)
请注意使用not exists
而不是exists
,因为您实际上是想更新EW_POLYLINE
中不不满足该要求的记录。>
这样,您在子查询中不需要左连接,并且条件EW_POLYLINE.ID = EW_OB_ELEMENTY.IDE
使子查询与外部更新语句相关。
还要注意,它的形式与我在my answer to your previous question中提供的最后一个解决方案中的select语句类似。