[英]Combining two JOIN queries together
我有3个表Appliance,Tx_property,Rx_property
#Appliance Table structure:
-id
-tx_property_id
-rx_property_id
-...
#Tx_property Table structure:
-id
-...
#Rx_property Table structure:
-id
-...
在rx_property.id = Appliance.id和tx_property.id = Appliance.id上设置约束
是否可以仅运行一个查询以从Appliance表中检索具有相应条目的所有记录(基于rx_property_id和tx_property_id)?
总而言之,我想将以下两个查询合并为一个。
select * from appliance INNER JOIN rx_property ON rx_property.id= appliance.rx_property_id;
select * from appliance INNER JOIN tx_property.id ON tx_property.id= appliance.tx_property_id;
有任何想法吗? 谢谢!
编辑:
因此,如果我有以下示例记录:
appliance records:
id = 70
tx_property_id = 11
rx_property_id = null
id = 71
tx_property_id = 12
rx_property_id = null
id = 72
tx_property_id = null
rx_property_id = 11
id = 73
tx_property_id = null
rx_property_id = 12
tx_property records:
id = 11
name = 'tx_aa'
id = 12
name = 'tx_bb'
rx_property records:
id = 11
name = 'rx_aa'
id = 12
name = 'rx_bb'
我希望其中4个被检索为:
appliance.id = 70
appliance.tx_property_id = 11
appliance.rx_property_id = null
tx_property.id = 11
tx_property.name = 'tx_aa'
appliance.id = 71
appliance.tx_property_id = 12
appliance.rx_property_id = null
tx_property.id = 12
tx_property.name = 'tx_bb'
appliance.id = 72
appliance.tx_property_id = null
appliance.rx_property_id = 11
tx_property.id = 11
tx_property.name = 'rx_aa'
appliance.id = 73
appliance.tx_property_id = null
appliance.rx_property_id = 12
tx_property.id = 11
tx_property.name = 'rx_aa'
就这么简单:
select * from appliance
INNER JOIN rx_property ON rx_property.id= appliance.rx_property_id
INNER JOIN tx_property ON tx_property.id= appliance.tx_property_id
您可以根据需要将多个连接放入单个SELECT语句中。
您可以在单个查询中将两个表连接到appliance
:
select *
from appliance a
join rx_property r on r.id = a.rx_property_id
join tx_property t on t.id = a.tx_property_id
上面的查询仅返回引用这两个表的这些行。 如果要获取所有行,请使用left join
:
select *
from appliance a
left join rx_property r on r.id = a.rx_property_id
left join tx_property t on t.id = a.tx_property_id;
id | rx_property_id | tx_property_id | id | name | id | name
----+----------------+----------------+----+-------+----+-------
70 | 11 | | 11 | rx_aa | |
71 | 12 | | 12 | rx_bb | |
72 | | 11 | | | 11 | tx_aa
73 | | 12 | | | 12 | tx_bb
(4 rows)
您可以在选择列表中使用coalesce()
选择不为空的列,例如:
select
a.id, rx_property_id, tx_property_id,
coalesce(r.name, t.name) as property_name
from appliance a
left join rx_property r on r.id = a.rx_property_id
left join tx_property t on t.id = a.tx_property_id
id | rx_property_id | tx_property_id | property_name
----+----------------+----------------+---------------
70 | 11 | | rx_aa
71 | 12 | | rx_bb
72 | | 11 | tx_aa
73 | | 12 | tx_bb
(4 rows)
还要注意,我为表使用了别名,通常使查询更具可读性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.