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”,但没有用
答案 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
可能会导致性能问题,因此您应该考虑更多地了解不同类型的JOINS
(https://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')