标签: in-clause

如何避免为IN子句重复此子查询?

我有一个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 dry subquery in-clause

2
推荐指数
2
解决办法
6186
查看次数

使用SQL从一组值中查找缺少的值

如何使用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,

sql oracle in-clause

2
推荐指数
1
解决办法
7500
查看次数

使用Rails Active Record在IN列表中Postgres ORDER BY值

我收到按"收入"排序的UserIds列表(一次大约1000个).我在"我的系统数据库"中有用户记录,但"收入"列不存在.我想从列表中收到的排序顺序中的"我的系统数据库"中检索用户.我尝试使用Active Record执行以下操作,期望以与排序列表中相同的顺序检索记录,但它不起作用.

//PSEUDO CODE
User.all(:conditions => {:id => [SORTED LIST]})
Run Code Online (Sandbox Code Playgroud)

我在下面的链接中找到了类似问题的答案,但我不确定如何使用Active Record实现建议的解决方案.

按IN值列表排序

还有其他办法吗?

请指导.

Shardul.

postgresql activerecord ruby-on-rails sql-order-by in-clause

2
推荐指数
1
解决办法
1797
查看次数

使用具有大量id列表的IN子句更新表的问题

嗨我在尝试使用IN子句更新表时遇到问题,我有一个很大的客户端列表,应该更新4500+.

Update table 
set columnA = 'value'
where ID in ( biglistofids )  //biglistofids > 4500 ids
Run Code Online (Sandbox Code Playgroud)

我收到此错误"字符串或二进制数据将被截断."

我用相同的脚本尝试了更少的ids(2000)并且它运行良好.

我也试过使用临时表,但我得到了同样的错误.

  1. SELECT Id INTO tmpTable FROM dbo.table WHERE id IN (biglistofids) //create temporal table succesfully
  2. Update table set columnA = 'value' FROM table INNER JOIN tmpTable ON table.ID = tmpTable.ID

有没有办法处理这个,而不重复每2000条记录的代码?

提前致谢

sql t-sql sql-server sql-server-2005 in-clause

1
推荐指数
1
解决办法
588
查看次数

where子句中的CASE语句使用等于和IN

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

上面的查询给出了错误,但我想要类似的东西,我无法找到.

sql case-statement in-clause sql-server-2008

1
推荐指数
2
解决办法
1万
查看次数

在SQL Server中,是否可以在IN子句中包含2列?

我正在尝试使用IN子句,但过滤需要在由2列定义的一组项上.这可能吗?可能还有其他方法可以做到这一点(例如表变量),但如果可能的话,我想将其作为IN子句来实现,因为在我的应用程序中动态创建会更优雅,更简单.

这个伪代码可能会让我更清楚我正在尝试做什么.

SELECT *
FROM Distributors
WHERE (City,State) IN (('Springfield','OH'), ('Springfield','MO'), ('Houston','TX'))
Run Code Online (Sandbox Code Playgroud)

sql sql-server in-clause

1
推荐指数
1
解决办法
78
查看次数

如何在IN条件下使用超过1000个值?

我正在使用java.我在对象级别有2000个键值,并且必须从DB中获取该值的相应记录.我在这里找到了临时表建议 ,但是它不会影响性能吗?如何在单个镜头中插入这些值,以便减少数据库调用次数?

sql oracle in-clause

0
推荐指数
1
解决办法
1035
查看次数