微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

列之间范围内的值的左连接

如何解决列之间范围内的值的左连接

我有一个包含 IP 的主表(在本例中为虚拟数字),我还有另一个表用作 IP 黑名单。我想检查一个IP是否属于黑名单。

问题是黑名单包含 IP 范围,所以我必须检查有问题的 IP 是否是两个范围列之间的值。

主ip_int_table

ip_int
1
7
5

第二个 ip_int_blacklist_table

ban_id from_ip_int to_ip_int
0 0 1
1 8 9
2 2 6

想要的结果

ip_int ban_id
1 0
7
5 2

这是我尝试过的 sql,但是我收到一个错误提示我不能在没有字段相等的情况下使用左连接。 (但我没有任何匹配的键,所以我不能使用相等性)。

SELECT
  ip.ip_int,bl.ban_id
FROM ip_int_table ip
LEFT JOIN ip_int_blacklist_table bl
  ON ip.ip_int BETWEEN bl.from_ip_int AND bl.to_ip_int

为什么我不能在 BigQuery 中对 LEFT JOIN 执行 ON BETWEEN

解决方法

你可以试试这个

SELECT ip.ip_int,(select ban_id from ip_int_blacklist_table 
    where ip.ip_int between from_ip_int and to_ip_int)ban_id
FROM ip_int_table ip 
,

在 BigQuery 中,您可以扩展这些值:

SELECT ip.ip_int,bl.ban_id
FROM ip_int_table ip LEFT JOIN
     (ip_int_blacklist_table bl CROSS JOIN
      UNNEST(GENERATE_ARRAY(bl.from_ip_int,bl.to_ip_int,1)) bl_ip_int
     )
     ON ip.ip_int = bl.bl_ip_int
,
select ip_int  from ip_int  ip
where exists
(select 1 from ip_int_blacklist  blk
where  ip.ip_int between blk.from_ip_int and blk.to_ip_int )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?