我需要获得预期的输出,但是我们必须使用强制性的子查询。我没有子查询就得到了预期的输出,但是我只是无法弄清楚如何通过子查询来获得它。 我已经附上了ER图和预期的输出。
问题描述: 列出来自“泰米尔纳德邦”的所有客户帐户进行的所有类型RD帐户交易的完整详细信息。 (使用子查询)
在不使用子查询的情况下查询预期输出:
select bt.*
from bank_transaction bt,bank_rd_account bra, bank_customer bc, bank_cust_contact bcc
where bt.trans_acc_no=bra.account_no
and bra.rd_cust_id=bc.cust_id
and bc.cust_id=bcc.cust_id
and cust_state='Tamilnadu'
order by trans_dt;
答案 0 :(得分:2)
如果我对您的要求正确无误,那么以下逻辑应有助于您获得所需的输出。
为此目的,使用适当的连接是最佳选择。但是,根据需要使用子查询解决此问题,可以考虑以下示例代码。
SELECT *
FROM bank_transaction bt
WHERE bt.trans_acc_no IN
(
SELECT bra.account_no
FROM bank_rd_account bra
INNER JOIN bank_customer bc
ON bra.rd_cust_id=bc.cust_id
INNER JOIN bank_cust_contact bcc
ON bc.cust_id=bcc.cust_id
and cust_state='Tamilnadu'
)
答案 1 :(得分:1)
尝试以下代码:
SELECT * FROM BANK_TRANSACTION bt
WHERE bt.TRANS_ACC_NO IN
(
SELECT bra.ACCOUNT_NO
FROM BANK_RD_ACCOUNT bra, BANK_CUSTOMER bc
WHERE bra.RD_CUST_ID = bc.CUST_ID
AND bc.CUST_ID = (SELECT bcc.CUST_ID FROM BANK_CUST_CONTACT bcc
WHERE bcc.CUST_ID = bc.CUST_ID
AND CUST_STATE='Tamilnadu')
);
答案 2 :(得分:0)
SELECT * FROM bank_transaction t
WHERE t.trans_acc_no IN(SELECT r.account_no
FROM bank_rd_account r, bank_customer c, bank_cust_contact cc
WHERE r.rd_cust_id = c.cust_id
AND c.cust_id = cc.cust_id
AND cc.cust_state = 'Tamilnadu')
ORDER BY trans_no;