有3种关系:
person(id, first_name, original_surname, new_surname, birth_date)
marriage(m_id, w_id, date)
child_of(child_id, father_id, mother_id)
对同胞的查询为:
(
select P1.id, P2.id
from (
person join child_of on id=child_id
) as P1
natural join (person join child_of on id=child_id) as P2
using (father_id)
where P1.mother_id < P2.mother_id
)
union
(
select P1.id, P2.id
from (
person join child_of on id=child_id
) as P1
natural join (person join child_of on id=child_id) as P2
using (mother_id)
where P1.father_id < P2.father_id
)
我是sql的新手,我试图了解“幕后”的情况。最后创建哪个表,以及查询如何查找同父异母的兄弟。
是否已创建P1,然后将其与P2联接,然后它们都联接在一起,where
对表有何影响?
这里的时间顺序是什么,首先发生什么,其次发生...
答案 0 :(得分:1)
此处的处理不会超出解析器步骤,该步骤将检测查询中的语法错误。自然连接(最好避免)不会使用USING
子句。
但是假设您的意思是INNER
而不是NATURAL
,答案很大程度上取决于表中数据的数量和分布以及数据库的配置。
此外,表上的索引也会影响答案。
执行这种查询的方式有很多,数据库引擎将自动选择在给定情况下最快的查询。
您可以使用EXPLAIN
命令查看PostgreSQL选择哪种执行计划。