我有3张表,A,B和C的 struct 如下
CREATE TABLE a (
id SERIAL NOT NULL PRIMARY KEY
);
CREATE TABLE b (
id SERIAL NOT NULL PRIMARY KEY,
a_id INT REFERENCES a(id) ON DELETE CASCADE
);
CREATE TABLE c (
id SERIAL NOT NULL PRIMARY KEY,
a_id INT REFERENCES a(id) ON DELETE CASCADE
);
关系是多对一的.我想要的是,对于表b中的每一行,我想要判断表c中的任何一行是否引用了表a中的同一行.现在,我已经有了查询
SELECT
b.id,
true
FROM
b
WHERE EXISTS (
SELECT 1
FROM c
WHERE b.a_id = c.a_id
)
UNION
SELECT
b.id,
false
FROM
b
WHERE NOT EXISTS (
SELECT 1
FROM c
WHERE b.a_id = c.a_id
)
ORDER BY id
虽然我不确定,但我认为这是在做双重工作,并且两次遍历表,我想知道如何优化它,使其只遍历表一次.
可以用一个简单的查询吗,或者我需要做一些复杂的事情吗?