как я могу получить доступ к столбцу из подзапроса - PullRequest
0 голосов
/ 08 марта 2019
  select u.phone, u.email , t.to_address (error from this)
  from user_accounts u 
  where u.id 
  in 
   (select w.user_id 
   from wallets w 
   where w.id 
   in 
     (
     select t.wallet_id 
     from withdraws t 
     where t.to_address 
     in 
     ('1F6o1fZZ7', 'pJDtRRnyhDN')))

Я хочу получить столбец to_address из подзапроса. Как я могу получить его в postgresql?

Я пытаюсь назначить 'AS' для подзапроса, но это не сработало

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Объединение возвращает таблицу результатов, составленную из данных из нескольких таблиц. Вы также можете получить ту же таблицу результатов, используя подзапрос. Подзапрос - это просто оператор SELECT внутри другого оператора выбора.

select u.phone, u.email , t.to_address (
 from user_accounts u 
INNER JOIN wallets w  ON u.id= w.user_id 
INNER JOIN withdraws t ON t.wallet_id =w.id 
  where t.to_address  in ('1F6o1fZZ7', 'pJDtRRnyhDN')
0 голосов
/ 08 марта 2019

Вы не можете достичь того, что пытаетесь использовать подзапрос. Если вам нужны записи из разных таблиц, и у них есть общий столбец, который связывает их, вы должны сделать это, используя JOIN.

Иногда (не во всех случаях) IN может вызвать проблемы с производительностью, поэтому вам следует больше узнать о различных типах JOINS (https://www.w3schools.com/sql/sql_join.asp)

)

Проверьте ссылку для сравнения: Внутреннее объединение против выполнения оператора where в

О запросе:

SELECT
  u.phone, u.email , t.to_address (error from this)
FROM
  user_accounts u 
  INNER JOIN wallets w ON u.id = w.id
  INNER JOIN withdraws t ON t.wallet_id = w.id
WHERE
  t.to_address IN ('1F6o1fZZ7', 'pJDtRRnyhDN')
0 голосов
/ 08 марта 2019

используйте объединение со всей таблицей, подзапрос не требуется

 select u.phone, u.email , ww.to_address 
 from user_accounts u  left join wallets w  on u.id=w.user_id
  left jon withdraws ww on w.id=ww.wallet_id
where ww.to_address in ('1F6o1fZZ7', 'pJDtRRnyhDN')

Вы не можете получить доступ к t.address, так как этот столбец внутри условия in. Я использовал left объединение, но, похоже, это будет inner join тип, потому что вы использовали фильтр in ('1F6o1fZZ7', 'pJDtRRnyhDN'), хотя после применения условия условия он также ведет себя как внутреннее объединение

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