簡體   English   中英

如何使用“ WHERE”和“ IN”正確編寫SQL查詢

[英]how to write sql query correctly with “WHERE” and “IN”

我想選擇包含給定ID和給定Branch的記錄,所以我提出了此查詢,我想知道這是否是編寫此查詢的正確方法

我正在使用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') 

我的桌子看起來像

+----+----------+-------------+-----------+
| 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')

這產生了事實。

示例二:

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

這產生了錯誤。

你可以在這里閱讀更多關於IN的信息

AND是邏輯運算符,並且僅當任一側的兩個語句均為true時才產生true。 像這樣:

true  AND true = true

false AND true = true AND false = false

如果我們將示例一和示例二結合在一起,則會得到:

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

由於示例一是正確的,但示例二是錯誤的,因此這將作為錯誤返回。

您的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') ,甚至可以在后面加上SELECT (子查詢) IN以查看該值是否在子查詢返回的集合中。

是的,這是正確的方法。 通過將方法鏈接在一起,您可以使其更加簡潔:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM