0

我有两张表 PRODUCT 和 ACCOUNT。

PRODUCT 表列

product_id   (PK)                      
subscription_id 

ACCOUNT 表列

account_nbr
subscription_id  
  (account_nbr and subscription_id are primary key columns in account table)
... Other columns  

我必须account_nbr找到subscription_id一个product_id.

我得到product_id作为输入。使用它我可以得到subscription_id from PRODUCT table并且使用subscription_id我可以account_nbr从 ACCOUNT 表中获取值。

不是在两个查询中获取信息,而是在一个查询中完成?

如下所示:

select distinct a.acct_nbr,p.subscription_id 
from ACCOUNT  a,PRODUCT p
where v.product_id = ' val 1' and 
v.subscription_id  = p.subscription_id 

与两个单独的查询相比,上述查询的性能会低吗?

4

1 回答 1

3

我必须为 product_id 找到 account_nbr 和 subscription_id。

因此,您的方法是正确的,您需要将两个结果集连接在一起:

select p.account_nbr, p.subscription_id
  from account a
  join product p
    on a.subscription_id = p.subscription_id
 where p.product_id = :something

几点:

  1. 您的查询中有别名v;我不知道这是从哪里来的。
  2. 学习使用 ANSI 连接语法;如果你犯了一个错误,那就更明显了。
  3. 您正在选择a.acct_nbr,它不按原样存在。
  4. 不需要 DISTINCT。ACCOUNT_NBR 和 PRODUCT_ID 是 ACCOUNT 的主键。

与两个单独的查询相比,上述查询的性能会低吗?

可能不是。如果您的查询是正确的并且您的表被正确索引,那么您编写的任何代码都不太可能击败 SQL 引擎。该数据库旨在快速选择数据。

于 2013-08-26T11:54:55.343 回答