标签: in-clause

使用Entity框架的sql IN子句的动态linq查询表达式树

我想为EF 6.0中的sql IN子句创建一个动态linq表达式,代码为第一个approch.请注意,我是Expressions的新手.我想要的是

select * from Courses where CourseId in (1, 2, 3, 4)
//CourseId is integer
Run Code Online (Sandbox Code Playgroud)

正常的linq查询看起来像这样.但我想动态查询它

string[] ids = new string[]{"1", "2", "3", "4"};
var courselist = DBEntities.Courses.Where(c => ids.Contains(SqlFunctions.StringConvert((decimal?)c.CourseId)))
Run Code Online (Sandbox Code Playgroud)

有两种方法可以进行动态表达.
1)一种方法是遍历id并创建表达式
下面的代码将在调试视图中创建以下表达式

{f => ((StringConvert(Convert(f.CourseId)).Equals("23") Or StringConvert(Convert(f.CourseId)).Equals("2")) Or StringConvert(Convert(f.CourseId)).Equals("1"))}
Run Code Online (Sandbox Code Playgroud)

动态表达是

var param = Expression.Parameters(typeof(Course), "f")
MemberExpression property = Expression.PropertyOrField(param, "CourseId");                   
MethodInfo mi = null;
MethodCallExpression mce = null;
if (property.Type == typeof(int))
{
   var castProperty = Expression.Convert(property, typeof(double?));
   var t = Expression.Parameter(typeof(SqlFunctions), "SqlFunctions");
   mi = typeof(SqlFunctions).GetMethod("StringConvert", new …
Run Code Online (Sandbox Code Playgroud)

c# linq expression dynamic in-clause

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

使用 JavaScript 代码的 IN 子句

我的应用程序中有 JavaScript 代码,它使用 OR(||) 条件检查值,如下面的代码片段所示。在我的大部分代码中,OR 条件的数量并不少。

问题:有没有办法通过使用这样的方法使具有多个 OR 条件的代码更加简洁:value IN ('s','b','g','p','z')?我对尽可能接近 IN 子句的东西感兴趣。

if(value === "s" || value === "b" || value === "g" || value === "p" || value === "z") {

  //do something

 }
Run Code Online (Sandbox Code Playgroud)

javascript in-clause

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

列在MyBatis'IN'子句中

如何将整数列表传递给MyBatis XML,以便在MySQL查询的in子句中使用?

我正在使用Java 7,MySQL 5.6 DB和MyBatis 3.0.4以及mapper-xml文件中的查询.

目前,我正在将这个整数列表转换为字符串,并使用字符串替换(${}运算符)将值放在"IN"子句中 - 虽然它按预期工作,但这种方法使参数容易受到注入.

我尝试过使用一个<foreach>元素,但我无法弄清楚要指定的属性.

下面是一个示例Java代码:

public List<Stripper> getStripperDetails(String club, List<Integer> stripperIds) {
        Map<String, Object> input = new HashMap<>();
        input.put("club", club);
        input.put("stripperIds", stripperIds);
        return stripClubMapper.getStripperDetails(input);
}
Run Code Online (Sandbox Code Playgroud)

映射器xml:

<select id="getStripperDetails" parameterType="java.util.HashMap" resultMap="StripperMap">
    SELECT STRIPPER_ID, STAGE_NAME, REAL_NAME, CLUB FROM EXOTIC_DANCERS WHERE CLUB = #{club} AND STRIPPER_ID IN     
    <foreach item="item" index="index" collection="stripperIds" open="(" separator="," close=")">
        #{index}
    </foreach>
</select>
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚要为<foreach>元素指定的属性- 我继续为#{index}的值运行NullPointerException.

你能帮我理解<foreach>元素的正确用法吗?

编辑:

@ 10086,

下面是堆栈跟踪:

org.mybatis.spring.MyBatisSystemException: nested …
Run Code Online (Sandbox Code Playgroud)

java xml mysql in-clause mybatis

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

使用mysql变量来保存逗号分隔值以用于where子句

我必须运行这样的查询(查询1) -

select something from sometable where someId in (1,2,3)
Run Code Online (Sandbox Code Playgroud)

我想为ID部分保留一个变量,就像这样(查询2) -

set @myIds = "1,2,3";
select something from sometable where someId in (@myIds);
Run Code Online (Sandbox Code Playgroud)

但是这不会给出预期的结果(给出一个空的结果集),也没有查询错误.

我检查了如果我将逗号分隔的ID包装在引号内,查询结果为空结果集(查询3) -

select something from sometable where someId in ("1,2,3");
Run Code Online (Sandbox Code Playgroud)

I guess when I am using variable @myIds like I showed above (query 2), it is evaluating to the above query (query 3).

mysql variables where-clause in-clause

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

在operator-python,sql中给出参数(列表或数组)

我在python中有一个列表.

article_ids = [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)

我需要在sql语句中使用这个列表,如下所示:

SELECT id FROM table WHERE article_id IN (article_ids)
Run Code Online (Sandbox Code Playgroud)

我怎样才能将这个清单提供给我的IN()条款?

我已经尝试了一些谷歌搜索方式,但我无法理解.

>> print ids_list
    placeholders= ', '.join('?'*len(ids_list))  # "?, ?, ?, ... ?"
    query = 'SELECT article_id FROM article_author_institution WHERE institution_id IN ({})'.format(placeholders)
    print query
    cursor.execute(query, ids_list)
Run Code Online (Sandbox Code Playgroud)

我得到的错误消息:

SELECT article_id FROM article_author_institution WHERE institution_id IN (?)
     query = query % db.literal(args)
    TypeError: not all arguments converted during string formatting
Run Code Online (Sandbox Code Playgroud)

例如:

ids_list = [9,10]

placeholders= ', '.join('%'*len(ids_list))  # "?, ?, ?, ... ?"
query = …
Run Code Online (Sandbox Code Playgroud)

python sql parameters in-clause

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

SQL Server IN 与 = 查询中(对于一个值)

首先,对于模糊的主题名称感到抱歉(我想不出更好的东西)。

一个 SO 答案让我思考当我放弃=IN 时是否真的会对性能产生影响。

select 1 id, 'abc' name into #a union 
select 2, 'abcd' union 
select 3, 'abcde' 

select * from #a where id = 1 ------ Query 1
select * from #a where id in (1)------ Query 2
Run Code Online (Sandbox Code Playgroud)

我检查了这两个查询的查询计划,发现它们对我来说是相同的(也许这个例子很简单,可能这就是原因)。

但是使用 时我是否违反了任何性能最佳实践IN?当然,这肯定会涉及一些开销,因为 anIN可以处理多个项目,甚至SELECTS. 我知道IN在功能方面提供了更多,但对于有多个记录的情况id = 1

select * from #a where id = (SELECT id from #a where id = 1)------ Query 3
select …
Run Code Online (Sandbox Code Playgroud)

sql-server optimization in-clause

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

将参数传递给 SQL Server 中的 IN 子句

可能的重复:
参数化 SQL IN 子句?
SQL Server - 带有声明变量的 In 子句

你好,

我在将参数传递给“IN”子句时遇到问题。我正在使用以下查询。

询问:

SELECT Topics.Topic_Id  FROM Topics 
    Where Topic_Description IN (''+ @Topics +'')    
Run Code Online (Sandbox Code Playgroud)

当参数具有单个值时,此查询有效。我的参数可以有逗号分隔的多个值,例如:“一”、“二”、“三”、“四”。但是只要有多个参数,查询就会失败。如何克服这个?请建议。

谢谢

我必须将上述内容用作存储过程的一部分。我必须将选择查询的结果放入如下游标中:

DECLARE cur_TopicIDs CURSOR FOR SELECT Topics.Topic_Id FROM Topics Where Topic_Description IN (''+ @Topics +'')....等

在这种情况下,我如何按照其他链接中的建议使用动态 sp

stored-procedures sql-server-2005 in-clause

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

SQL子句中的多个列

SELECT *
FROM Tabl tabb
WHERE (tabb.col1, tabb.col2) IN ( (1,2), (3,4))
Run Code Online (Sandbox Code Playgroud)

上面的工作在Oracle中,但我试图在一个专有的SQL引擎中运行,该引擎不支持在IN中使用多个列进行上述查询.

我试图在DB中找到1,2和3,4的组合.

请帮助我实现上述任何替代方案.

我正在寻找一次从Java传递col1和col2的值列表的方法,因此'='可能不是一个选项,因为它可能需要两个SQL语句来实现上述目的.

sql in-clause multiple-columns in-operator

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

Sql IN 子句会降低性能

我需要有关 sql 查询性能的帮助...

我有一个视图,当我运行视图时

select * 
from udv_salesAnalyze 
where _month=12 and _year=2012 
Run Code Online (Sandbox Code Playgroud)

我在 2 秒内得到结果

但是当我添加另一个过滤器时

select * from udv_salesAnalyze 
where _month=12 and _year=2012 
and userRef in (1,2,5,6,9,11,12,13,14
,19,22,25,26,27,31,34,35,37,38,39,41,47,48,49,53,54,57,59,61,62
,65,66,67,68,69,70,74,77,78,79,80,83,86,87,88,90,91,92,94)  
Run Code Online (Sandbox Code Playgroud)

我在 1 分 38 秒内得到了结果..

我将查询修改为

select * from udv_salesAnalyze 
where _month=12 and _year=2012 
and userRef in (select * from udf_dependedUsers(2)) 
Run Code Online (Sandbox Code Playgroud)

(这里 udf_dependedUsers 是表返回的函数)我在 38 秒内得到了结果

我加入了 table retuned 函数来查看,但我再次在 38-40 秒内得到了结果......

有没有其他方法可以更快地获得结果...

我会很感激你能给我一个解决方案......

多谢 ...

执行计划:

这里是 udf_dependedUsers 的代码:

ALTER FUNCTION [dbo].[udfn_dependedUsers] (@userId int)
RETURNS @dependedUsers table (userRef int)
AS …
Run Code Online (Sandbox Code Playgroud)

sql sql-server performance in-clause

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

Mysql 查询带有 IN 子句和每个项目的限制

我在 MySQL 中有一个表,其中有一个字段“class_id”。我需要编写一个查询,返回使用 IN 子句列表中的每个值按降序时间顺序排序的前 15 行。

查询解释:

select * from table_x where class_id IN (1,2,3) sort by time_x desc limit 15;
Run Code Online (Sandbox Code Playgroud)

在上面的示例查询中,我需要获取按降序时间顺序排序的每个 class_id(1,2 和 3)的前 15 行。

mysql limit in-clause

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