我试图从parent and child_address
读取数据。但是child_address没有parent_id.Query1 and Query2
工作正常。如果我结合错误即将来临。子和其他表中的数据是可选的,只有父将拥有数据所以我使用左连接。请帮我解决这个问题。
表:
create table parent(p_id number,name varchar(5));
create table table1(t1_id number,p_id number,t1_name varchar(5));
create table table2(t2_id number,p_id number,t2_name varchar(5));
create table child(c_id number,p_id number,c_name varchar(5));
create table child_address(ca_id number,c_id number,city varchar(5));
所需字段:
parent.name,table1.name,table2.name,child_address.city
查询1:
select parent.p_id,table1.t1_name,table2.t2_name from parent
left join table1 on parent.p_id = table1.p_id
left join table2 on parent.p_id = table2.p_id;
QUERY2:
select child.p_id,child.c_id,child_address.ca_id,child_address.city from child
left join child_address on child.c_id = child_address.c_id;
组合查询:
select a.*,b.* from (
select * from (
select parent.p_id,table1.t1_name,table2.t2_name from parent
left join table1 on parent.p_id = table1.p_id
left join table2 on parent.p_id = table2.p_id) as a
left join
select * from (
select child.p_id,child.c_id,child_address.ca_id,child_address.city from child
left join child_address on child.c_id = child_address.c_id) as b on a.pid = b.pid)
select
p.name, t1.t1_name, t2.t2_name, ca.city
from
parent p
left join table1 t1 on t1.p_id = p.p_id
left join table2 t2 on t2.p_id = p.p_id
left join child c on c.p_id = p.p_id
left join child_address ca on ca.c_id = c.c_id
1.pid
而不是子查询上的p_id
。
2.尝试删除qazxsw poi和qazxsw poi子查询后的qazxsw poi关键字如下
你可以试试。
AS
FROM
你在这里缺少一个左括号:JOIN
。它必须是:SELECT *
FROM ( SELECT a.name,
a.t1_name,
a.t2_name,
b.city
FROM ( SELECT parent.p_id ,
parent.name,
table1.t1_name,
table2.t2_name
FROM parent
LEFT JOIN table1 ON parent.p_id = table1.p_id
LEFT JOIN table2 ON parent.p_id = table2.p_id
) a
LEFT JOIN ( SELECT child.p_id ,
child.c_id ,
child_address.ca_id ,
child_address.city
FROM child
LEFT JOIN child_address ON child.c_id = child_address.c_id
) b ON a.p_id = b.p_id
) a1;
而不是。
无论如何,你的查询有点太复杂了。 SQLFiddle可以写成left join select * from
。所以这应该只是:
left join (select * from
当然你可以用(select * from (<query>))
条款做同样的事情:
(<query>)