在一个表中查找不存在于另一个表中的ID

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在一个表中查找不存在于另一个表中的ID相关的知识,希望对你有一定的参考价值。

给出了卡桑德拉的两张桌子:

xs (id bigint, x bigint)
0,10
1,11
2,12
3,13
4,14

ys (id bigint, y bigint)
0,100
2,144
4,196

在这个最小的例子中,我想得到xs的所有行,其中id尚未包含在ys中,即

select
1,11
3,13

我怎样才能做到这一点?

根据我想在ys中创建新行的选定行,基本上同步(仅添加)ysxs

这是我创建键空间/表的代码:

from cassandra.cluster import Cluster

cluster = Cluster()
session = cluster.connect()

session.execute('DROP KEYSPACE keyspace_x;')
session.execute('DROP KEYSPACE keyspace_y;')

session.execute('''
    CREATE KEYSPACE keyspace_x
    WITH replication = {
        'class' : 'SimpleStrategy',
        'replication_factor' : 1
    };''');

session.execute('''
    CREATE KEYSPACE keyspace_y
    WITH replication = {
        'class' : 'SimpleStrategy',
        'replication_factor' : 1
    };''');

session.execute('''CREATE TABLE keyspace_x.xs (
    id bigint,
    x bigint,
    PRIMARY KEY (id)
);''');

session.execute('''CREATE TABLE keyspace_y.ys (
    id bigint,
    y bigint,
    PRIMARY KEY (id)
);''');

session.execute('INSERT INTO keyspace_x.xs(id, x) VALUES (%s, %s)',(0, 10))
session.execute('INSERT INTO keyspace_x.xs(id, x) VALUES (%s, %s)',(1, 11))
session.execute('INSERT INTO keyspace_x.xs(id, x) VALUES (%s, %s)',(2, 12))
session.execute('INSERT INTO keyspace_x.xs(id, x) VALUES (%s, %s)',(3, 13))
session.execute('INSERT INTO keyspace_x.xs(id, x) VALUES (%s, %s)',(4, 14))

session.execute('INSERT INTO keyspace_y.ys(id, y) VALUES (%s, %s)',(0, 100))
session.execute('INSERT INTO keyspace_y.ys(id, y) VALUES (%s, %s)',(2, 144))
session.execute('INSERT INTO keyspace_y.ys(id, y) VALUES (%s, %s)',(4, 196))

SQL I would use something like that

SELECT xs.id, xs.x FROM xs
LEFT JOIN ys ON xs.id = ys.id
WHERE ys.id IS NULL;

但是CQL怎么样?

目前我只是从两个表中获取所有ID并在我的应用程序中进行设置差异,但我想这远非最佳。

答案

没有多表功能。 How implement LEFT or RIGHT JOIN using spark-cassandra-connector您可以在Cassandra上添加关系图层。 How to do a join queries with 2 or more tables in cassandra cql你可以徒劳地搜索手册。 http://cassandra.apache.org/doc/latest/cql/dml.html重新浏览/谷歌搜索:其他SQL方法做你想要的是EXCEPTaka MINUSNOT IN。代数功能是DIFFERENCE aka MINUSANTIJOIN)。

以上是关于在一个表中查找不存在于另一个表中的ID的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 从一个表中获取不存在于另一个表中的记录,并附加了 where 子句

如果 id 不存在于另一个表中,则根据条件使用 sql 计算 id 的编号

表单输入验证,仅允许存在于另一个表中的值 - Access

SELECT EXISTS 检查行是不是存在于另一个表中

如果 ID 存在于另一个表中,则拉行

MySQL 根据记录是不是存在于另一个表中选择布尔值