从已加入(1到多个)的postgresql接收1行
我有一个问题: 我有两个主要的表公寓,租户有一个连接到多个1公寓,多个租户。 我想把我所有的公寓都搬走,但他有一个房客。 首选租户是ot=2的租户。有两个可能的值:1或2。 我尝试使用子查询,但在postgresql中,它不允许返回超过1列。 我不知道怎么解决它。这是我的最新代码:从已加入(1到多个)的postgresql接收1行,sql,postgresql,one-to-many,postgresql-9.1,Sql,Postgresql,One To Many,Postgresql 9.1,我有一个问题: 我有两个主要的表公寓,租户有一个连接到多个1公寓,多个租户。 我想把我所有的公寓都搬走,但他有一个房客。 首选租户是ot=2的租户。有两个可能的值:1或2。 我尝试使用子查询,但在postgresql中,它不允许返回超过1列。 我不知道怎么解决它。这是我的最新代码: SELECT a.apartment_id, a.apartment_num, a.floor, at.app_type_desc_he, tn.otype_desc_he, tn.e_name FROM pu
SELECT a.apartment_id, a.apartment_num, a.floor, at.app_type_desc_he, tn.otype_desc_he, tn.e_name
FROM
public.apartments a INNER JOIN public.apartment_types at ON
at.app_type_id = a.apartment_type INNER JOIN
(select t.apartment_id, t.building_id, ot.otype_id, ot.otype_desc_he, e.e_name
from public.tenants t INNER JOIN public.ownership_types ot ON
ot.otype_id = t.ownership_type INNER JOIN entities e ON
t.entity_id = e.entity_id
) tn ON
a.apartment_id = tn.apartment_id AND tn.building_id = a.building_id
WHERE
a.building_id = 4 AND tn.building_id=4
ORDER BY
a.apartment_num ASC,
tn.otype_id DESC
Thanx提前
选择a.partment\u id、a.partment\u num、a.floor
,at.app_type_desc_he,tn.otype_desc he,tn.e_name
来自公共公寓a
在ON.app\u type\u id=a.partment\u type上加入public.partment\u type
左连接
选择t.公寓id、t.建筑id、ot.类型id
,ot.otype_desc_he,e.e_name
来自公共租客
在ot.otype\u id=t.ownership\u type上加入public.ownership\u类型ot
在t.entity\u id=e.entity\u id上连接实体e
按ot订购。otype_id=2说明
限制1
tn在tn公寓id上,tn建筑id=a公寓id,a建筑id
其中a.building_id=4
和tn.building_id=4
a.公寓的订单数量;-,tn.otype_id DESC-无意义
重点强调了关键部分
这两种情况都适用
如果一套公寓有租户,则将返还1人。
如果有一个或多个ot.otype_id=2的租户,则该租户将属于该类型。
如果没有租户,公寓仍然会被归还。
如果,对于ot.otype\u id
有两个可能的值:1或2
。。。您可以简化为:
按ot.otype\U id说明订购
调试查询
尝试从基本查询中删除WHERE子句并进行更改
加入公共公寓类型
到
左连接公共公寓类型
然后逐个将它们添加回去,以查看哪个条件排除所有行
at.app\u type\u id和a.partment\u type真的匹配吗?请包括表的定义和一些示例数据。感谢您的快速回复。我试过了你的提议,但一点结果也没有。我确实找到了ROWselect的工作。不幸的是,我没有成功地用PHP提取数据。有什么知识吗?@user1488098:我添加了一些调试指针。这应该很简单,但对于没有充分了解情况的局外人来说,这只是猜测。@user1488098:如果您提供语句来构造表并加载足够的样本数据进行测试,那么对于那些试图提供帮助的人来说,这真的会让事情变得容易得多。没有it,人们需要做更多的工作,可能需要做出一些偏离目标的猜测,从而降低他们为您提供所需内容的能力。