用于连接两个单独查询的备用查询

时间:2013-02-13 06:53:32

标签: java sql sql-server hive teradata

我可以将q1q2合并到一个查询中吗?

我需要在Hive中使用替代查询。

SELECT q3.*
FROM   (
           (
               SELECT prod_id,
                      prod_name,
                      cust_id
               FROM   sell_info
               GROUP BY
                      prod_id,
                      prod_name,
                      cust_id
           )q1
           JOIN
           (
               SELECT cust_name,
                      cust_address
               FROM   cust_info
               WHERE  cust_type LIKE 'Reg%'
           )q2
           ON q1.cust_id = q2.cust_id
       ) q3;

4 个答案:

答案 0 :(得分:3)

您可以直接JOIN两个表cust_infosell_info而无需子查询,如下所示:

Select DISTINCT *
FROM sell_info AS s
INNER JOIN cust_info AS c ON s.cust_id = c.cust_id
WHERE c.cust_type like 'Reg%';

请注意:无需GROUP BY prod_id, prod_name, cust_id,同时您只选择 这三列:

   SELECT prod_id,
          prod_name,
          cust_id
   FROM   sell_info
   GROUP BY
          prod_id,
          prod_name,
          cust_id

只需使用DISTINCT关键字即可实现,而无需GROUP BYDISTINCT消除了因JOIN而出现的重复项。

答案 1 :(得分:0)

您也可以使用它:

SELECT a.prod_id,
       a.prod_name,
       a.cust_id,
       b.cust_name, 
       b.cust_address
FROM  sell_info a 
inner join cust_info b on  a.cust_id = b.cust_id 
where b.cust_type LIKE 'Reg%'

答案 2 :(得分:0)

如果您只想查看两个表中都存在cust_is的客户和产品数据,则可以使用内部联接。

Select prod_id,
       prod_name,
       cust_info.cust_id,
       cust_name,
       cust_address 
from  sell_info inner join cust_info 
      on sell_info.cust_id=cust_info.cust_id 
where cust_type LIKE 'Reg%'

答案 3 :(得分:0)

使用内连接的第一个答案是正确的。

如果您想要更快的查询,可以按如下方式使用Intersect:

选择cust_id FROM sell_info 相交 select cust_id FROM cust_info;

它的速度是内连接的两倍,但唯一的缺点是你只能获得两个表中常见的字段。如果您需要其他字段,那么最好的选择是内连接。