我需要运行一个查询,该查询会将INSERT
个新行插入到SQL Server join
表中。
假设我有下表来描述商店出售哪些产品以及在哪些州使用
products
:
+------------+--------------+
| product_id | product_name |
+------------+--------------+
| 1 | Laptop |
| 2 | Aspirin |
| 3 | Mattress |
+------------+--------------+
stores
:
+----------+------------+
| store_id | store_name |
+----------+------------+
| 1 | Walmart |
| 2 | Best Buy |
| 3 | Sam's Club |
+----------+------------+
products_stores_states
:
+------------+----------+-------+
| product_id | store_id | state |
+------------+----------+-------+
| 1 | 2 | AL |
| 1 | 2 | AR |
| 2 | 2 | AL |
| 2 | 2 | AR |
| 3 | 2 | AL |
| 3 | 2 | AR |
+------------+----------+-------+
因此,在这里我们看到百思买出售了AL和AR的所有3种产品。
我需要做的是以某种方式在products_stores_states
表中插入行,以为其当前销售的所有产品添加可用区。
有了一个小的数据集,我可以逐行手动进行操作:
INSERT INTO products_stores_states (product_id, store_id, state) VALUES
(1,2,'AZ'),
(2,2,'AZ'),
(3,2,'AZ');
由于这是一个很大的数据集,因此实际上不是一个选择。
我将如何为product_id
表中已包含的每一个products_stores_states
插入一个新的Best Buy状态?
奖励::如果可以同时针对多个状态进行查询,那就更好了。
现在,我无法解决这个问题,但是我认为需要一个子查询来获取我需要使用的匹配product_id
值的列表。
答案 0 :(得分:1)
如果肯定的话,表的插入状态为“ NEW”,则可以将状态变量更改为要插入新记录的状态。
DECLARE @State CHAR(2), @StoreId INT;
SET @State = 'AZ';
SET @StoreId = 2;
INSERT INTO products_stores_states (product_id, store_id, state)
SELECT DISTINCT product_id, @StoreId, @State
FROM dbo.products_stores_states
WHERE store_id = @StoreId;
您首先可以使用以下命令查看此语句的内容:
DECLARE @State CHAR(2)
SET @State = 'AZ';
SET @StoreId = 2;
SELECT DISTINCT product_id, @StoreId, @State
FROM dbo.products_stores_states
WHERE store_id = @StoreId;
答案 1 :(得分:0)
以下查询将完成您想做的事情
DECLARE @temp TABLE (
state VARCHAR(20)
)
-- we are inserting state names into a temp table to use it further
INSERT INTO @temp (state)
VALUES
('AZ'),
('MA'),
('TX');
INSERT INTO products_stores_states(product_id, store_id, state )
SELECT
T.product_id,
T.store_id,
temp.state
FROM(
SELECT DISTINCT
Product_id, store_id
FROM
products_stores_states
WHERE store_id = 2 -- the store_id for which you want to make changes
) AS T
CROSS JOIN
@temp AS temp
首先,我们将状态名称存储到表变量中。然后,我们只需要为特定商店选择不同 store_id
和product_id
组合。
然后,我们应该在存储状态名称的表变量中插入不同的值cross join
。
Here是现场演示。
希望,这会有所帮助!谢谢。