我有两个表table1具有id、name,table2具有id1、id2和id3、name1、name2和name3。我要选择table1。表2中不存在id:id1、id2和id3
select T1.ID,t1.name
from table1 t1
where not exists (
SELECT *
FROM table2 t2
where t1.ID=t2.ID1 or t1.ID=t2.ID2 or or t1.ID=t2.ID3 )
我收到此查询的错误消息
我有两个表table1具有id、name,table2具有id1、id2和id3、name1、name2和name3。我要选择table1。表2中不存在id:id1、id2和id3
select T1.ID,t1.name
from table1 t1
where not exists (
SELECT *
FROM table2 t2
where t1.ID=t2.ID1 or t1.ID=t2.ID2 or or t1.ID=t2.ID3 )
我收到此查询的错误消息
3条答案
按热度按时间tp5buhyn1#
经过一点研究,我发现了这个。基本上,一个查询中的子查询不能有多个列
IN
或者NOT IN
中的条件WHERE
条款。这就是查询当前失败的原因:子查询从表2中获取所有列。根据我对您的问题的理解,您希望选择结果将是表2中不存在的元素的位置。
为此,您只需使用
LEFT OUTER JOIN
. 在sql中,我会将join保留在所有三列上,但hive似乎不支持中的多个条件JOIN
语句,因此可以使用以下替代方法:只要加上一样多
LEFT JOIN
以及WHERE
子句,因为您有要检查的列。下面是这个查询概念(数据不同,但概念不同)。
2nbm6dog2#
先加入
ID1
,然后通过ID2
,然后通过ID3
:第2步和第3步上的连接将从t1接收已经减少的数据集,这个解决方案可能适合于大型表。
yqhsw0fo3#