1

我可以将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

4 回答 4

3

您可以直接使用JOIN这两个表cust_info而不sell_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 BY. DISTINCT消除了由于JOIN.

于 2013-02-13T06:56:36.230 回答
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%'
于 2013-02-13T07:56:54.977 回答
0

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

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

select cust_id FROM sell_info 相交 select cust_id FROM cust_info;

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

于 2013-03-04T16:12:33.380 回答
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%'
于 2013-02-13T07:15:18.160 回答