在我们可以使用JOIN的地方使用SQL语句中的"IN"关键字是否存在任何性能问题?
SELECT xxx
FROM xxx
WHERE ID IN (SELECT Id FROM xxx)
Run Code Online (Sandbox Code Playgroud) 我可以在SQL IN子句中放置任何值来保证该子句的计算结果为false吗?
SELECT *
FROM Products
WHERE ProductID IN (???)
Run Code Online (Sandbox Code Playgroud)
有什么我可以替换??? 保证不会返回任何行?
所以我目前正在尝试在Node.js中进行查询:
// friends is an array object
db.all('SELECT email ' +
'FROM users' +
'WHERE email in ?', friends, function(err, rows) {
if (!err) {
Run Code Online (Sandbox Code Playgroud)
我知道你可以为每个'?'传递一系列参数 符号,但在这种情况下是否可以使用IN运算符?如果没有,我应该进行字符串连接还是准备好的语句?
大家下午好,
我有一个关于 SQL 查询的问题。是否可以使用数组作为使用“IN”命令的查询的参数?
例如,
int x = {2,3,4,5}
UPDATE 'table_name' set 'field' = 数据 WHERE field_ID IN (x)
我问这个问题的原因是为了避免当我必须更新数据库中的数据时使用迭代 SQL 语句。我还考虑过在 UPDATE 查询中使用 for every 语句,但我不知道如果更新 100 多条记录,它会减慢系统速度,是否会影响查询的性能。
顺便说一句,我正在使用 VB.Net。我的数据库是 MySQL Workbench。
所以我在 PostgreSQL 10 中有这个简单的查询。
with bunch_of_things as (
select vans_id from shoes where adidas_id = 1
)
select * from vans where vans.id in (bunch_of_things) ;
Run Code Online (Sandbox Code Playgroud)
我收到错误column "bunch_of_things" does not exist
我知道我可以将第一个选择放在第二个查询的括号内,以定义 IN 部分
但由于我将在同一事务中多次使用第一个查询的结果,因此我不想多次执行相同的查询。
那么如何才能让 IN 与 CTE 一起工作呢?
(如果这是不可能的,我怎样才能获得一次查询结果并在事务中多次使用它们?)
谢谢
postgresql transactions common-table-expression sql-in postgresql-10
我的示例 SQL 是
select * from fruits where name in ('Orange','grape','APPLE','ManGO',etc....);//
Run Code Online (Sandbox Code Playgroud)
是否可以在 Postgres 的 IN 运算符中包含 ilike 或 ~* ?
我的解决方案是
select * from fruits where upper(name) in
(upper('Orange'),upper('grape'),upper('APPLE'),upper('ManGO'),etc....);
Run Code Online (Sandbox Code Playgroud)
我认为这不是正确的方法,请让我知道这种情况的最佳解决方案
我正在使用 Postgres 9.2.24。
我有一个以_order大约 100,000,000 行命名的表。该表有一个名为 的列merged_id int8。大约 2,000,000_order行有一个merged_id值,其余的为空。
我找到了两种不同的 Postgres 行为,我在其中_order使用查询进行搜索
select * from _order where merged_id in ( 10001 ,10002 ,10003 ....., 11000);
Run Code Online (Sandbox Code Playgroud)
如果我创建这样的索引:
create index order_merged_id_index on _order(merged_id);
Run Code Online (Sandbox Code Playgroud)
无论 in 子句中有多少个 id(测试从 1 到 50 到 100 到 200 到 1000)EXPLAIN显示搜索都将使用index_scan.
但是如果我创建这个部分索引:
create index order_merged_id_index on _order(merged_id) where merged_id is not null;
Run Code Online (Sandbox Code Playgroud)
EXPLAINseq_scan在WHERE子句中显示100 多个 ID 号。
为什么是这样?
有什么办法可以解决吗?
我使用go和gorm编写了一个API,它在我们的数据库上运行计算并返回结果.
我只是IN在使用聚合时达到了条件的参数限制.示例查询:
SELECT SUM(total_amount) from Table where user_id in(...70k parameters) group by user_id
Run Code Online (Sandbox Code Playgroud)
我当前的一个边缘案例有> 65535个用户ID,所以我的Postgres客户端抛出一个错误:
Run Code Online (Sandbox Code Playgroud)got 66037 parameters but PostgreSQL only supports 65535 parameters
我不确定最好的办法是什么.一个将处理此边缘情况的大量参数,同时不影响我的典型用例.我是否对id进行分块并迭代多次查询将其存储在内存中,直到我拥有所需的所有数据?用ANY(VALUES)...
显然,从查询中我对Postgres的知识非常有限,所以任何帮助都会令人难以置信地受到赞赏.
如何优化在一个表中搜索不属于一组的 ID 的简单查询。
我创建了以下查询
Select userId
from user
where userId not in (5000, 5001, 5002, 5003, more....)
Run Code Online (Sandbox Code Playgroud)
请注意,该列表包含超过 35000 行。我收到以下数据库错误
消息 8623,级别 16,状态 1,第 1 行
查询处理器耗尽内部资源,无法生成查询计划。这是一种罕见的事件,仅适用于极其复杂的查询或引用大量表或分区的查询。
有些人建议通过使用左连接来优化查询,但我只是在一个表中搜索,那么还有什么选择呢?
我想从表中删除所有记录,其中选择的字符串值包含在另一个表中的另一个值中(忽略区分大小写).
例如:if value1="Hello"(来自一个表)和value2-"Hello word"(来自另一个表),那么该记录应该被删除.
DELETE FROM [table1]
WHERE value1 LIKE '%' + (SELECT value2 FROM [table2]) + '%'
Run Code Online (Sandbox Code Playgroud)
但是该SQL语句返回错误.
sql-in ×10
sql ×8
postgresql ×4
sql-server ×4
t-sql ×2
go ×1
go-gorm ×1
indexing ×1
mysql ×1
node.js ×1
sql-delete ×1
sql-like ×1
sqlite ×1
subquery ×1
transactions ×1
vb.net ×1