如何引用另一个在mysql中提交的表?

时间:2016-06-24 04:08:44

标签: mysql

有两个表,我想实现像

这样的东西
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等于trueid=3的{​​{1}} {1}}等于假,因为文章提到了图像[3],即文章[2]现在指的是图像[1]。

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查询,以便从两个表中获得所需的结果。