我正在尝试建立如下查询:
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
然后comment
和like
表如下所示:
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
>