我有两个postgresql表:
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
我想获取login_log
其中没有一行的每个IP地址ip_location
。
我尝试了此查询,但它引发了语法错误。
SELECT login_log.ip
FROM login_log
WHERE NOT EXIST (SELECT ip_location.ip
FROM ip_location
WHERE login_log.ip = ip_location.ip)
ERROR: syntax error at or near "SELECT" LINE 3: WHERE NOT EXIST (SELECT ip_location.ip`
我也想知道此查询(进行调整以使其工作)是否是为此目的性能最佳的查询。
基本上有4种技术可以完成此任务,所有这些技术都是标准SQL。
NOT EXISTS
在Postgres中通常最快。
SELECT ip
FROM login_log l
WHERE NOT EXISTS (
SELECT -- SELECT list mostly irrelevant; can just be empty in Postgres
FROM ip_location
WHERE ip = l.ip
);
LEFT JOIN / IS NULL
](https://www.postgresql.org/docs/current/queries-table-expressions.html#QUERIES-FROM)
有时这是最快的。通常最短。通常会产生与相同的查询计划NOT EXISTS
。
SELECT l.ip
FROM login_log l
LEFT JOIN ip_location i USING (ip) -- short for: ON i.ip = l.ip
WHERE i.ip IS NULL;
EXCEPT
短的。不那么容易集成到更复杂的查询中。
SELECT ip
FROM login_log
EXCEPT ALL -- "ALL" keeps duplicates and makes it faster
SELECT ip
FROM ip_location;
请注意(根据文档):
除非
EXCEPT ALL
使用,否则消除重复项。
通常,您会需要ALL
关键字。如果您不在乎,请继续使用它,因为它可以使查询 更快 。
NOT IN
](https://www.postgresql.org/docs/current/functions-subquery.html#FUNCTIONS-SUBQUERY-NOTIN)
只有没有NULL
价值或知道如何NULL
正确处理才行。我 不会
将其用于此目的。
此外,更大的表可能会降低性能。
SELECT ip
FROM login_log
WHERE ip NOT IN (
SELECT DISTINCT ip -- DISTINCT is optional
FROM ip_location
);
我有两个postgresql表: 我想从登录日志中获取每个IP地址,它在IP\U位置中没有一行 我尝试了此查询,但它引发了语法错误。 我还想知道这个查询(通过调整使其工作)是否是用于此目的的性能最好的查询。
问题内容: 我有一张桌子和一张桌子。向用户显示随机的其他用户数据,并可以决定他喜欢还是不喜欢它。我正在为尚未评级的代理用户选择新的随机用户合作伙伴! 现在,我试图选择表中没有行的所有用户,并将执行用户与已评级用户的关系评级。 该表是一个标准的用户表,在我的列,,,和。 我正在使用Laravel Eloquent,但也可以使用原始sql。 我的尝试: 这是错误的,因为通过此尝试我没有选择任何新用户。
问题内容: 我有一个关于ORACLE的问题,我写了一个PLSQL CODE来检查一个表是否存在,如果存在,那么我从该表中选择一些东西。 如果(表存在)从表中选择…。 问题是,即使表条件不存在且select语句从不执行,即使表不存在,我也总是会收到错误消息。 我认为这是因为在编译时检查了我的代码:“ select from ..”,如果表不存在,则会打印错误。我该如何解决这样的问题?..这是我的代码
我有两个问题: 从表1中选择*,其中my\u值介于值1和值2之间 从表2中选择值1、值2 表2中的value1和value2的集合是唯一的。如何在第一个查询的where语句中插入查询2的所有结果集?
问题内容: 具有下表(): 另一个帮助表(): 我正在寻找一个SQL查询来输出以下内容: 所以,每一次是和是 在 响应表, 汇总 对话上下文到这一点,忽略不池中的响应结束谈话的一部分。 在上面的示例中,活动 响应文本 为1中的 3 。 我尝试了以下复杂的SQL,但有时会中断将文本汇总错误的情况: 我敢肯定有更好的方法。 问题答案: 这是我的看法: 这将扫描表一次,但是我不确定它的性能是否会比您的解
我有四张桌子A、B、C和D。 我需要选择值2(我从表D中猜测),其中值1和值3在表D中的同一行中,并且在表A和表C的行中都有相同的“城市”。 所以,如果表A有一行 表C有行 表D有行 然后我需要打印: