我有一个SQL脚本(目前针对SQLite运行,但它可能适用于任何数据库引擎),它使用相同的子查询两次,因为它可能会获取大量记录(该表有几百万行)I'我只想打电话一次.
缩短的伪查询版本如下所示:
SELECT * FROM
([the subquery, returns a column of ids]) AS sq
[a couple of joins, that fetches things from other tables based on the ids]
WHERE thisorthat NOT IN ([the subquery again])
Run Code Online (Sandbox Code Playgroud)
我尝试sq
以各种方式使用name()(有/无括号,有/无命名sq等列),但无济于事.
难道我真的有重复这个子查询?
澄清: 我在python和sqlite中这样做是一个可以完成的小演示,但我希望我的解决方案尽可能少地进行修改.在实际情况中,数据库将有几百万行,但在我的示例中,只有10行具有虚拟数据.因此,在例如MySQL上进行了优化的代码绝对足够好 - 它不必专门针对SQLite进行优化.但正如我所说,需要的修改越少越好.
如何使用SQL(Oracle DB)从一组值中找到缺失值,例如
SELECT NAME
FROM ACCOUNT
WHERE ACCOUNT.NAME IN ('FORD','HYUNDAI','TOYOTA','BMW'...)
Run Code Online (Sandbox Code Playgroud)
("IN"子句可能包含数百个值)如果ACCOUNT表中缺少"HYUNDAI",我需要将结果作为"HYUNDAI".
目前我使用上面的查询结果对原始值集进行Vlookup查找缺失值,我想直接获取缺失值而不进行Vlookup.
谢谢Kiran,
我收到按"收入"排序的UserIds列表(一次大约1000个).我在"我的系统数据库"中有用户记录,但"收入"列不存在.我想从列表中收到的排序顺序中的"我的系统数据库"中检索用户.我尝试使用Active Record执行以下操作,期望以与排序列表中相同的顺序检索记录,但它不起作用.
//PSEUDO CODE
User.all(:conditions => {:id => [SORTED LIST]})
Run Code Online (Sandbox Code Playgroud)
我在下面的链接中找到了类似问题的答案,但我不确定如何使用Active Record实现建议的解决方案.
还有其他办法吗?
请指导.
Shardul.
postgresql activerecord ruby-on-rails sql-order-by in-clause
嗨我在尝试使用IN子句更新表时遇到问题,我有一个很大的客户端列表,应该更新4500+.
Update table
set columnA = 'value'
where ID in ( biglistofids ) //biglistofids > 4500 ids
Run Code Online (Sandbox Code Playgroud)
我收到此错误"字符串或二进制数据将被截断."
我用相同的脚本尝试了更少的ids(2000)并且它运行良好.
我也试过使用临时表,但我得到了同样的错误.
SELECT Id INTO tmpTable FROM dbo.table WHERE id IN (biglistofids) //create temporal table succesfully
Update table set columnA = 'value' FROM table INNER JOIN tmpTable ON table.ID = tmpTable.ID
有没有办法处理这个,而不重复每2000条记录的代码?
提前致谢
WHERE CONDITION1='ABC'
AND Status =
CASE @Option
WHEN 1 THEN 'True'
WHEN 2 THEN 'False'
WHEN 3 THEN NULL
WHEn 4 THEN **IN ('True', 'False', NULL)**
END
Run Code Online (Sandbox Code Playgroud)
如何编写查询,我的第一个选项直接匹配,=
但我的最后一个选项需要一个IN
上面的查询给出了错误,但我想要类似的东西,我无法找到.
我正在尝试使用IN子句,但过滤需要在由2列定义的一组项上.这可能吗?可能还有其他方法可以做到这一点(例如表变量),但如果可能的话,我想将其作为IN子句来实现,因为在我的应用程序中动态创建会更优雅,更简单.
这个伪代码可能会让我更清楚我正在尝试做什么.
SELECT *
FROM Distributors
WHERE (City,State) IN (('Springfield','OH'), ('Springfield','MO'), ('Houston','TX'))
Run Code Online (Sandbox Code Playgroud) 我正在使用java.我在对象级别有2000个键值,并且必须从DB中获取该值的相应记录.我在这里找到了临时表建议 ,但是它不会影响性能吗?如何在单个镜头中插入这些值,以便减少数据库调用次数?
in-clause ×7
sql ×6
oracle ×2
sql-server ×2
activerecord ×1
dry ×1
postgresql ×1
sql-order-by ×1
subquery ×1
t-sql ×1