首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL:如何找出哪个where子句失败

PostgreSQL:如何找出哪个where子句失败
EN

Stack Overflow用户
提问于 2020-04-28 05:25:30
回答 1查看 57关注 0票数 0

考虑一个包含以下列的属性表:

代码语言:javascript
复制
id, address, no_of_bedrooms, no_of_bathrooms, garage_size

并考虑包含以下列的投资者表:

代码语言:javascript
复制
id, name, no_of_bedrooms, no_of_bathrooms, garage_size

为了简单起见,我们假设一位投资者正在寻找一处房产上的no_of_bedrooms、no_of_bathrooms、garage_size的完全匹配。

现在,我可以运行一个查询来返回购买特定房产的投资者列表。

我想知道的是,我是否可以使用PSQL来找出哪些投资者对某个房产不感兴趣,以及该房产针对每个投资者的哪些特定属性不合格?

例如,假设有一个1bd,1个浴室的房产,4个投资者至少需要2bd,2个浴室的房子。我可以运行什么查询来产生以下输出?

代码语言:javascript
复制
property_id, investor_id, rejected_column_name

在上面的结果中,一个投资者可以有超过1行,这意味着一个属性被一个特定的投资者拒绝了不止一个原因。

使用SQL/PSQL可以做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 05:36:14

我建议取消透视,然后在属性级别加入:

代码语言:javascript
复制
with ip as (
      select i.*, v.*
      from investors ip cross join lateral
           (values ('no_of_bedrooms', no_of_bedrooms),
                   ('no_of_bathrooms', no_of_bathrooms),
                   ('garage_size', garage_size)
           ) v(prop, val)
     ),
     pp as (
      select i.*, p.*
      from properties ip cross join lateral
           (values ('no_of_bedrooms', no_of_bedrooms),
                   ('no_of_bathrooms', no_of_bathrooms),
                   ('garage_size', garage_size)
           ) v(prop, val)
    )
select ip.id, ip.name, pp.prop, ip.val, ip.name
from pp join
     ip
     on pp.prop = ip.prop 
where pp.id = ? and and pp.val <> ip.val;

这假设属性都是字符串。如果它们有其他类型,您可以使用::text转换它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61468714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档