SQL 'arrays' 重复使用 IN 比较

标签 sql database arrays

完全可以像这样执行 SELECT 语句:

SELECT *
FROM orders
WHERE order_id in (10000, 10001, 10003, 10005);

但是,是否可以创建一个变量来存储该“数组”(10000,...)以便在多个语句中重复使用?

SELECT *
FROM orders
WHERE order_id in @IDarray;

如果这是一个非常简单的问题,我们深表歉意 - 我们都必须问他们一次!

编辑:嗯,也许我应该澄清一下。在我的确切情况下,我有大量 ID(让我们使用上面的数组作为示例)是硬编码的但可能会更改。

这些应该可重复用于多个 INSERT 语句,这样我们就可以为每个 ID 将内容插入到多个表中。两个这样的最终结果可能是:

INSERT INTO table1 VALUES (10000, 1, 2, 3);
INSERT INTO table1 VALUES (10001, 1, 2, 3);
INSERT INTO table1 VALUES (10003, 1, 2, 3);
INSERT INTO table1 VALUES (10005, 1, 2, 3);

INSERT INTO table2 VALUES (10000, a, b, c);
INSERT INTO table2 VALUES (10001, a, b, c);
INSERT INTO table2 VALUES (10003, a, b, c);
INSERT INTO table2 VALUES (10005, a, b, c);

显然,这里能够指定数组可以节省空间,还允许在一个位置更改它,而不必修改 INSERT。

最佳答案

对于 Microsoft SQL Server,您可以使用表变量:

CREATE TABLE @IDTable(id INT PRIMARY KEY);
-- insert IDs into table

SELECT *
FROM orders o
INNER JOIN @IDTable i ON i.id = o.order_id;

INSERT INTO table2
SELECT id, 1, 2, 3
  FROM @IDTable

INSERT INTO table2
SELECT id, 'a', 'b', 'c'
  FROM @IDTable

关于SQL 'arrays' 重复使用 IN 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16584150/

相关文章:

mysql - 以与我的 `IN(....)` 语句中的值相同的顺序返回查询结果

sql - 选择 postgresql 进行组合

javascript - 在 javascript 中从我的 Parse 数据库中获取图像?

c# - SQLCommand ExecuteNonQuery 最大 CommandText 长度?

database - 使用 Triplestore 意味着什么

iphone - 如何在 NSArray 的 NSDictionary 中查找(而不是删除)重复项?

javascript - 如何使用node.js比较两个json数组

php - 整个文本不会显示在表格中,PHP

mysql - 在 SQL 中添加行之前检查表中是否存在行

java - Firebase - 将子项添加到数组列表 - java