我List<Strings>通过执行查询得到.这必须传递给IN子句值的另一个查询.如何在HQL中传递它们?
我们可以转换List为Array并且可以通过它,这不是问题.
最后,我必须通过列表List<String>或Array或String形成的IN子句.
假设我有一个表单查询
SELECT * FROM MYTABLE WHERE MYCOL in (?)
Run Code Online (Sandbox Code Playgroud)
我想参数化参数.
有没有一种直接的方法在Java中使用JDBC,以一种可以在不修改SQL本身的情况下在多个数据库上工作的方式?
假设我有一个SP,其SELECT声明如下,
SELECT product_id, product_price FROM product
WHERE product_type IN ('AA','BB','CC');
Run Code Online (Sandbox Code Playgroud)
但是数据转到该IN子句必须通过包含值字符串的单个变量.下面有东西链接
SELECT product_id, product_price FROM product
WHERE product_type IN (input_variables);
Run Code Online (Sandbox Code Playgroud)
但它没有那样工作.知道怎么做吗?
我知道我可以在JPA中将列表传递给命名查询,但NamedNativeQuery怎么样?我尝试了很多方法,但仍然无法将列表传递给NamedNativeQuery.任何人都知道如何将列表传递给NamedNativeQuery中的in子句?非常感谢你!
NamedNativeQuery如下:
@NamedNativeQuery(
name="User.findByUserIdList",
query="select u.user_id, u.dob, u.name, u.sex, u.address from user u "+
"where u.user_id in (?userIdList)"
)
Run Code Online (Sandbox Code Playgroud)
它被称为这样:
List<Object[]> userList = em.createNamedQuery("User.findByUserIdList").setParameter("userIdList", list).getResultList();
Run Code Online (Sandbox Code Playgroud)
但结果并不像我预期的那样.
System.out.println(userList.size()); //output 1
Object[] user = userList.get(0);
System.out.println(user.length); //expected 5 but result is 3
System.out.println(user[0]); //output MDAVERSION which is not a user_id
System.out.println(user[1]); //output 5
System.out.println(user[2]); //output 7
Run Code Online (Sandbox Code Playgroud) 我有一个叫做玩家的桌子如下:
First_Id Second_Id Name
1 1 Durant
2 1 Kobe
1 2 Lebron
2 2 Dwight
1 3 Dirk
Run Code Online (Sandbox Code Playgroud)
我希望在这个表上写一个select语句来检索其第一个id和第二个id匹配一堆指定的第一个和第二个id的所有行.
因此,例如,我希望选择第一个和第二个ID如下的所有行:(1,1),(1,2)和(1,3).这将检索以下3行:
First_Id Second_Id Name
1 1 Durant
1 2 Lebron
1 3 Dirk
Run Code Online (Sandbox Code Playgroud)
是否可以以下列方式编写选择查询:
SELECT *
FROM PLAYERS
WHERE (First_Id, Second_Id) IN ((1,1), (1,2) and (1,3))?
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以编写类似于上面的SQL我想知道.有没有办法为IN子句指定表示多行的值,如图所示.
我正在使用DB2.
是否可以在IN子句中包含多个字段?类似于以下内容:
select * from user
where code, userType in ( select code, userType from userType )
Run Code Online (Sandbox Code Playgroud)
我正在使用ms sql server 2008
我知道这可以通过连接和存在来实现,我只是想知道它是否可以用该IN子句完成.
我想根据url字符串选择一些id,但是我的代码只显示第一个.如果我写手册的id's它很棒.
我有这样的网址http://www.mydomain.com/myfile.php?theurl=1,2,3,4,5(ids)
现在在myfile.php我有我的sql连接和:
$ids = $_GET['theurl']; (and i am getting 1,2,3,4,5)
如果我使用这个:
$sql = "select * from info WHERE `id` IN (1,2,3,4,5)";
$slqtwo = mysql_query($sql);
while ($tc = mysql_fetch_assoc($slqtwo)) {
echo $tc['a_name'];
echo " - ";
}
Run Code Online (Sandbox Code Playgroud)
我得到了正确的结果.现在,如果我使用下面的代码,它不起作用:
$sql = "select * from info WHERE `id` IN ('$ids')";
$slqtwo = mysql_query($sql);
while ($tc = mysql_fetch_assoc($slqtwo)) {
echo $tc['a_name'];
echo " - ";
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我有两对的三个整数值。
我想将其用作 WHERE 子句中的 IN 列表。
(2019, 5) (2019, 6) (2019, 7)
我想在这样的查询中使用上面的两对列表:
SELECT
*
FROM
WEEK_REPORT A
WHERE
A.user_id IN ('test2','test5' ) AND
(A.year, A.week_no) IN ((2019,4),(2019,5),(2019,6));
Run Code Online (Sandbox Code Playgroud)
为此,我写了如下源代码:
// lastYear=2019, lastWeekNo=4
Tuple t = JPAExpressions.select(Expressions.constant(lastYear), Expressions.constant(lastWeekNo))
.from(weekReport)
.fetchOne();
// currentYear=2019, currentWeekNo=5
Tuple t2 = JPAExpressions.select(Expressions.constant(currentYear), Expressions.constant(currentWeekNo))
.from(weekReport)
.fetchOne();
// nextYear=2019, nextWeekNo=4
Tuple t3 = JPAExpressions.select(Expressions.constant(nextYear), Expressions.constant(nextWeekNo))
.from(weekReport)
.fetchOne();
return queryFactory
.select(weekReport)
.from(weekReport)
.where(weekReport.user.eq(user)
.and(Expressions.list(weekReport.year, weekReport.weekNo).in(t, t2, t3)))
.fetch();
Run Code Online (Sandbox Code Playgroud)
但是,不会输出正确的结果并发生错误。
java.lang.UnsupportedOperationException: null
at com.querydsl.jpa.JPASubQuery.fetchOne(JPASubQuery.java:66) ~[querydsl-jpa-4.1.4.jar:na]
Run Code Online (Sandbox Code Playgroud)
我在官方文档里查了一下,没有出来。
有办法吗?
谢谢你。
是否有一种简单的方法可以通过WHERE idIN(...)子句分别订购MySQL结果?例:
SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3)
Run Code Online (Sandbox Code Playgroud)
回来
Article with id = 4
Article with id = 2
Article with id = 5
Article with id = 9
Article with id = 3
Run Code Online (Sandbox Code Playgroud)
并且
SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3) LIMIT 2,2
Run Code Online (Sandbox Code Playgroud)
回来
Article with id = 5
Article with id = 9
Run Code Online (Sandbox Code Playgroud)
更新:更具体地说,我想避免篡改括号中的数据WHERE articles.id IN (4, 2, 5, 9, 3),因为这些ID是动态的并且是自动排序的.
我想为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) in-clause ×10
mysql ×4
sql ×4
java ×2
select ×2
arraylist ×1
c# ×1
database ×1
db2 ×1
dynamic ×1
expression ×1
find-in-set ×1
hibernate ×1
hql ×1
jdbc ×1
jpa ×1
linq ×1
nativequery ×1
querydsl ×1
sql-order-by ×1
sql-server ×1
variables ×1