子查询中的动态表名称和变量

时间:2018-07-30 09:43:08

标签: sql postgresql

我正在尝试建立如下查询:

SELECT * FROM code
WHERE code.id = 2 AND
EXISTS (SELECT id FROM code.src_table_name WHERE (id = code.src_table_id AND (!archived OR archived = 0)))

显然这是行不通的,但是我将解释我想要实现的目标。

示例code表如下所示:

id  |  src_table_name  |  src_table_id
1      comment            2
2      like               21
3      comment            3

然后commentlike表如下所示:

comment table
-------------
id  |  archived  |  comment
2      0            test
3      1            test1

like table
-------------
id
21

这些当然是简化的表结构。

查询需要完成两项任务:

1. Check if table mentioned in src_table_name exists
2. Check if this table has a column called `archived`.
       - If `archived` column does not exist, continue
       - If `archived` column exists, make sure it is equal to 0

编辑:一些样本结果数据 当我们有以下查询时:

SELECT * FROM code
WHERE code.id = 1 AND
EXISTS (SELECT id FROM code.src_table_name WHERE (id = code.src_table_id AND (!archived OR archived = 0)))

这会给我:

id  |  src_table_name  |  src_table_id
1      comment            2

因为comment表存在(在src_table_name中提到),所以ID为2的行存在(在src_table_id中提到),注释表中的archived列存在,并且archived = 0

0 个答案:

没有答案