繁体   English   中英

我将如何编写此SQL UPDATE查询?

[英]How would I write this SQL UPDATE query?

说我有两个表:

new_dogs   <<---- CONTAINS DOGS SPOTTED TODAY
---------
name
breed
color
location
found_date

dog_locations  <<---- CONTAINS A HISTORY OF ALL DOGS EVER SPOTTED
---------------
name
breed
location
from_date
thru_date

new_dogs表中填充了今天发现的狗。 假设我连续三天在公园里发现了一只名为max的白色贵宾犬。 在第一天,将max插入到公园中的dog_locations表中,其起始日期为found_date。

第二天最多仍在公园出现,因此无需执行任何操作

第三天的最大值不再在new_dogs表(可以称为dogs_found_today表)中,这意味着他不再在公园里。 这意味着他在dog_locations中的输入不再有效,因此我想关闭他的thru_date。

我需要做的是更新dog_locations表中存在但不存在于new_dogs表中并且thru_date为NULL的狗的thru_date。 thru_date将设置为CURRENT_DATE()

每个dog_location必须唯一,主键为(name; breed; location; from_date)

我不知道该怎么做。

我可以选择在dog_locations中但不在new_dogs中的狗,如下所示:

SELECT name, breed, location, from_date
FROM dog_locations dl
WHERE NOT EXISTS (SELECT name, breed, location, found_date
              FROM new_dogs nd
              WHERE (nd.name = dl.name) AND (nd.breed = dl.breed)
                                    AND (nd.location = dl.location) 
                                    AND (nd.found_date = dl.from_date));
UPDATE dog_locations SET thru_date = <actualdate or whichever date> 
FROM dog_locations dl
WHERE NOT EXISTS (SELECT name, breed, location, found_date
              FROM new_dogs nd
              WHERE (nd.name = dl.name) AND (nd.breed = dl.breed)
                                    AND (nd.location = dl.location) 
                                    AND (nd.found_date = dl.from_date));

干杯安雅

但是您应该真正地重新思考数据库设计,并遵循LukLeds引入餐桌狗的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM