有两个表,我想实现像
这样的东西images[id].referenced = count(articles[image_id = id]) >= 1
articles: images:
,---------------------------------. ,--------------------------------.
| id | INT | PRIMARY | | id | INT | PRIMARY |
|-------------|---------|---------| |--------------------------------|
| image_id | INT | | | url | VARCHAR | |
|-------------|---------|---------| |------------|-------------------|
| name | VARCHAR | | | referenced | BOOLEAN | |
`---------------------------------' `--------------------------------'
即。仅当有TRUE
= image_id
的文章时,图片[id] .referenced才会为id
。
我该如何实现这个目标?
抱歉令人困惑的问题。我想在更新一些相关的articles.image_id时自动更新每行的images.referenced。
例如:
初始数据:
articles:
| id | image_id | name |
|----|----------|------------------------|
| 1 | 2 | First Article |
| 2 | 3 | The author is an idiot |
images:
| id | url | referenced |
|----|-----------------------------|------------|
| 1 | http://example.com/images/1 | false |
| 2 | http://example.com/images/2 | true |
| 3 | http://example.com/images/3 | true |
当执行像UPDATE articles SET image_id = 1 WHERE id = 2
这样的sql时,我希望表images
也会自动更新为referenced
id=1
等于true
和id=3
的{{1}} {1}}等于假,因为文章提到了图像[3],即文章[2]现在指的是图像[1]。
答案 0 :(得分:0)
如果您想更新该值,可以执行以下操作:
update images i
set referenced = (select count(*) from articles a where a.image_id = i.id) > 0;
稍微有效的方法是:
update images i
set referenced = exists (select 1 from articles a where a.image_id = i.id) > 0;
这会设置一次值。如果您需要维护该值,则需要insert
/ update
/ delete
个触发器。我不推荐这种方法。我建议只填写一个select
查询,以便从两个表中获得所需的结果。