我可以将q1
和q2
合并到一个查询中吗?
我需要在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;
答案 0 :(得分: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
而出现的重复项。
答案 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;
它的速度是内连接的两倍,但唯一的缺点是你只能获得两个表中常见的字段。如果您需要其他字段,那么最好的选择是内连接。