PostgreSQL: Как узнать, где предложение - PullRequest
0 голосов
/ 28 апреля 2020

Рассмотрим таблицу свойств со следующими столбцами:

id, address, no_of_bedrooms, no_of_bathrooms, garage_size

И рассмотрим таблицу инвесторов со следующими столбцами:

id, name, no_of_bedrooms, no_of_bathrooms, garage_size

Скажем для простоты, что инвестор ищет точное соответствие для no_of_bedrooms, no_of_bathrooms, garage_size для объекта.

Теперь я могу выполнить запрос, чтобы получить список инвесторов, которые будут покупать конкретную недвижимость.

Что Я хотел бы знать, могу ли я использовать PSQL, чтобы выяснить, какие инвесторы НЕ заинтересованы в собственности, и к какому специфическому атрибуту (ам) этого свойства не подходит для каждого из этих инвесторов?

Например, Допустим, есть собственность на 1 банд, 1 баня, а 4 инвесторам требуется минимум 2 бб на 2 бани. Какой запрос я могу выполнить, который даст следующий результат?

property_id, investor_id, rejected_column_name

В приведенном выше результате инвестор может иметь более 1 строки, что означает, что свойство было отклонено конкретным инвестором по более чем 1 причине .

Возможно ли это даже с SQL / PSQL?

1 Ответ

0 голосов
/ 28 апреля 2020

Я бы порекомендовал отключить и затем присоединить на уровне свойств:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...