如何使用"WHERE"正确编写sql查询;和“;IN"


how to write sql query correctly with "WHERE" and "IN"

我想选择包含给定ID和给定分支的记录,所以我提出了这个查询,我想知道这是否是写这个

的正确方法

我正在使用codeigniter

$orderids = array('2', '3');
$branch = array('branch1', 'branch2');
$this->db->where_in('order_id', $orderids);
$this->db->where_in('branch', $branch);
$query = $this->db->get('tbl_order_data'); 

使查询

SELECT *
FROM (`tbl_m_order_collection_data`)
WHERE `order_id` IN ('2', '3')
AND `branch` IN ('branch1', 'branch2') 

my table looks like

+----+----------+-------------+-----------+
| ID | order_id | branch      | item_code |
+----+----------+-------------+-----------+
|  1 |        1 | branch1     | 4R1       |
|  2 |        1 | branch2     | 4R11      |
|  3 |        1 | branch2     | ACS20x20  |
|  4 |       *2 | branch1     | ACS20x27  |
|  5 |       *2 | branch1     | ACS20x20  |
|  6 |        1 | branch1     | ACS20x20  |
|  7 |        2 | branch2     | ACS20x27  |
|  8 |       *3 | branch2     | ACS20x20  |
+----+----------+-------------+-----------+

我想从表中得到星星标记的记录。所以上面的查询是有效的使用吗?

从评论来看,你似乎想知道IN是如何工作的。

简单的答案是,IN在单词

之后的数组中查找单词之前声明的值。

一个例子:

'banana' IN ('apple','orange','banana')

结果为true。

两个例子:

1234 IN ('hello','world!')

返回false。

你可以在这里阅读更多关于IN的信息

AND是一个逻辑运算符,只有当两边的语句都为真时才返回真。这样的:

true  AND true = true
false AND true = true AND false = false

如果我们把例一和例二结合起来,我们得到:

'banana' IN ('apple','orange','banana')
AND
1234 IN ('hello','world!')

如果示例1为真,但示例2为假,则返回为假。

您的WHERE条款…

WHERE `order_id` IN ('2', '3') AND `branch` IN ('branch1', 'branch2')

. .可读为:"order_id为'2'或'3'且branch为'branch1'或'branch2 '的记录。"

也就是说,它大致相当于:

WHERE (`order_id` = '2' OR `order_id` = '3')
  AND (`branch` = 'branch1' OR `branch` = 'branch2')

WHERE ... IN的优点是您可以指定许多不同的值,例如order_id IN ('2', '3', '4', '5'),您甚至可以在IN之后放置SELECT(子查询),以查看该值是否"在"子查询返回的集合中。

是的,这是正确的做法。您可以通过将这些方法链接在一起来使它更简洁:

$query = $this->db
    ->where_in('order_id', $orderids)
    ->where_in('branch', $branch)
    ->get('tbl_order_data');