标签: where-in

我可以将数组绑定到IN()条件吗?

我很想知道是否可以使用PDO将值数组绑定到占位符.这里的用例试图传递一个值数组以用于IN()条件.

我希望能够做到这样的事情:

<?php
$ids=array(1,2,3,7,8,9);
$db = new PDO(...);
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN(:an_array)'
);
$stmt->bindParam('an_array',$ids);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

并让PDO绑定并引用数组中的所有值.

目前我正在做:

<?php
$ids = array(1,2,3,7,8,9);
$db = new PDO(...);
foreach($ids as &$val)
    $val=$db->quote($val); //iterate through array and quote
$in = implode(',',$ids); //create comma separated list
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN('.$in.')'
);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

这当然能完成这项工作,但只是想知道是否有一个内置的解决方案我缺席了?

php arrays pdo prepared-statement where-in

549
推荐指数
17
解决办法
20万
查看次数

MySQL - SELECT WHERE字段IN(子查询) - 为什么这么慢?

我在数据库中有两个重复项,我想检查,所以我做了什么看到重复,我这样做:

SELECT relevant_field
FROM some_table
GROUP BY relevant_field
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)

这样,我将获得所有具有related_field的行不止一次.此查询需要几毫秒才能执行.

现在,我想检查每个重复项,所以我想我可以在上面的查询中使用related_field选择some_table中的每一行,所以我喜欢这样:

SELECT *
FROM some_table 
WHERE relevant_field IN
(
    SELECT relevant_field
    FROM some_table
    GROUP BY relevant_field
    HAVING COUNT(*) > 1
)
Run Code Online (Sandbox Code Playgroud)

由于某种原因(这需要几分钟),结果显然是极慢的.究竟是什么让它变慢?related_field已编入索引.

最后我尝试从第一个查询创建一个视图"temp_view" (SELECT relevant_field FROM some_table GROUP BY relevant_field HAVING COUNT(*) > 1),然后再这样做我的第二个查询:

SELECT *
FROM some_table
WHERE relevant_field IN
(
    SELECT relevant_field
    FROM temp_view
)
Run Code Online (Sandbox Code Playgroud)

这很好用.MySQL在几毫秒内完成此任务.

这里有任何SQL专家可以解释发生了什么吗?

mysql subquery where-in

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

如何在Laravel,子查询中进行此操作

如何在Laravel中进行此查询:

SELECT 
    `p`.`id`,
    `p`.`name`, 
    `p`.`img`, 
    `p`.`safe_name`, 
    `p`.`sku`, 
    `p`.`productstatusid` 
FROM `products` p 
WHERE `p`.`id` IN (
    SELECT 
        `product_id` 
    FROM `product_category`
    WHERE `category_id` IN ('223', '15')
)
AND `p`.`active`=1
Run Code Online (Sandbox Code Playgroud)

我也可以通过连接来做到这一点,但我需要这种格式来提高性能.

php subquery where-in laravel laravel-3

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

Python/psycopg2 WHERE IN语句

在SQL语句中通过%s使列表(countryList)可用的正确方法是什么?

# using psycopg2
countryList=['UK','France']

sql='SELECT * from countries WHERE country IN (%s)'
data=[countryList]
cur.execute(sql,data)
Run Code Online (Sandbox Code Playgroud)

就像现在一样,它在尝试运行"(ARRAY [...])中的WHERE国家"后出错.除了通过字符串操作之外,有没有办法做到这一点?

谢谢

python psycopg2 where-in

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

使用带有WHERE IN的QueryOver的NHibernate

我会像这样创建一个QueryOver

SELECT *
FROM Table
WHERE Field IN (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

我尝试过Contains方法,但我遇到了异常

"System.Exception:无法识别的方法调用:System.String:Boolean包含(System.String)"

在这里我的代码

var qOver = _HibSession.QueryOver<MyModel>(() => baseModel)                                                                
  .JoinAlias(() => baseModel.Submodels, () => subModels)
  .Where(() => subModels.ID.Contains(IDsSubModels))
  .List<MyModel>();
Run Code Online (Sandbox Code Playgroud)

c# nhibernate where-in queryover

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

LINQ to Entities - where..in具有多列的子句

我正在尝试使用LINQ-to-EF查询表单的数据:

class Location {
    string Country;
    string City;
    string Address;
    …
}
Run Code Online (Sandbox Code Playgroud)

通过元组(国家,城市,地址)查找位置.我试过了

var keys = new[] {
    new {Country=…, City=…, Address=…},
    …
}

var result = from loc in Location
             where keys.Contains(new {
                 Country=loc.Country, 
                 City=loc.City, 
                 Address=loc.Address
             }
Run Code Online (Sandbox Code Playgroud)

但LINQ不希望接受匿名类型(我理解是在LINQ中表示元组的方式)作为Contains()的参数.

是否有一种"好"的方式在LINQ中表达这一点,同时能够在数据库上运行查询?或者,如果我只是迭代密钥和Union() - 一起编写查询,这会对性能有害吗?

c# linq-to-entities multiple-columns where-in

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

SQL在WHERE IN子句中使用CASE语句

where子句中使用case是否可行?像这样的东西:

 DECLARE @Status VARCHAR(50);
 SET @Status='published';

 SELECT * FROM Product P    
 WHERE P.Status IN (CASE WHEN @Status='published' THEN (1,3)
                                   WHEN @Status='standby' THEN (2,5,9,6)
                                   WHEN @Status='deleted' THEN (4,5,8,10)
                                   ELSE (1,3)
                                   END)
Run Code Online (Sandbox Code Playgroud)

此代码提供错误:','附近的语法不正确.

sql select case switch-statement where-in

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

Java中的SQL IN条件

我有多个条件要检查,如下所示,

if(pouch.getStatus().equals("Finalized") || pouch.getStatus().equals("Ready") 
  || pouch.getStatus().equals("Checkout") || pouch.getStatus().equals("Confirmed")
  || pouch.getStatus().equals("Book") || pouch.getStatus().equals("Started")
  || pouch.getStatus().equals("Inital") || pouch.getStatus().equals("Close")) {
        // Body
}
Run Code Online (Sandbox Code Playgroud)

是否有任何简单的方法来检查类似SQL IN条件的上述条件,以便代码看起来更简单?

java collections conditional hashset where-in

16
推荐指数
4
解决办法
487
查看次数

通过FMDB将数组传递给sqlite WHERE IN子句?

是否可以通过FMDB将数组传递给SELECT ... WHERE ... IN语句?我试图像这样内爆数组:

NSArray *mergeIds; // An array with NSNumber Objects
NSString *mergeIdString = [mergeIds componentsJoinedByString:@","];

NSString *query = @"SELECT * FROM items WHERE last_merge_id IN (?)";
FMResultSet *result = [database executeQuery:query, mergeIdString];
Run Code Online (Sandbox Code Playgroud)

这只适用于数组中只有一个对象,这使我相信FMDB在整个​​内爆字符串周围添加了引号.

所以我尝试将数组传递给FMDB的方法:

NSArray *mergeIds; // An array with NSNumber Objects
NSString *query = @"SELECT * FROM items WHERE last_merge_id IN (?)";
FMResultSet *result = [database executeQuery:query, mergeIds];
Run Code Online (Sandbox Code Playgroud)

这根本不起作用.

我没有在README或FMDB的github页面上的示例中找到任何关于它的内容.

谢谢,斯特凡

sqlite fmdb where-in ios

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

在IN子句中MySQL多列

我有一个数据库,其中有四列对应于起始位置和结束位置的地理坐标x,y.列是:

  • X0
  • Y0
  • X1
  • Y1

我有这四列的索引,序列为x0,y0,x1,y1.

我列出了大约一百个地理对的组合.我如何有效地查询这些数据?

我想按照这个SO答案的建议做这样的事情,但它只适用于Oracle数据库,而不适用于MySQL:

SELECT * FROM my_table WHERE (x0, y0, x1, y1) IN ((4, 3, 5, 6), ... ,(9, 3, 2, 1));
Run Code Online (Sandbox Code Playgroud)

我以为可能有可能对索引做点什么?什么是最好的方法(即:最快的查询)?谢谢你的帮助!

笔记:

  • 我无法更改数据库的架构
  • 我有大约100'000'000行

编辑: 代码按原样实际工作,但它非常慢,并没有利用索引(因为我们有一个旧版本的MySQL v5.6.27).

mysql sql where-in

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