我如何从子查询访问列

时间:2019-03-08 11:12:51

标签: sql postgresql join

  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 个答案:

答案 0 :(得分:1)

联接返回由多个表中的数据构成的结果表。您还可以使用子查询来检索相同的结果表。子查询只是另一个select语句中的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')

答案 1 :(得分:0)

使用所有表的联接,您不需要任何子查询

 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'),尽管在应用where条件之后它的行为也类似于内部连接

答案 2 :(得分:0)

您无法使用子查询来实现您想要的功能。如果您希望从不同的表中获得记录,并且它们有一个共同的唯一列来连接它们,那么您应该使用JOIN

有时(并非所有情况)IN可能会导致性能问题,因此您应该考虑更多地了解不同类型的JOINShttps://www.w3schools.com/sql/sql_join.asp

检查链接以进行比较: Inner join versus doing a where in clause

关于查询:

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')