【问题标题】:Insert into temporary table from select returns blank table从 select 插入临时表返回空白表
【发布时间】:2022-12-03 00:32:12
【问题描述】:

我试图用来自外部的 ID 填充两个临时表作为单个字符串,我将其拆分并保存到第三个临时表:

CREATE TABLE #TempProdotti (Id int NULL);
CREATE TABLE #TempProdottiAggregati (Id int NULL);
CREATE TABLE #TempCorsiSingoli (Id int NULL);

-- split ids and cast them as INT
INSERT INTO #TempProdotti (Id)
(SELECT CAST(value AS int) AS Id
 FROM string_split('3116,3122,3090', ','));

-- then search into products table if the ids match any aggregated (or not) product.
-- then save aggegated products id in one table and the not aggregated ones into another

INSERT INTO #TempCorsiSingoli (Id)
(SELECT Id
 FROM mod_SHOP_Prodotti
 WHERE Id IN (SELECT Id FROM #TempProdotti)
   AND ProdottoAggregato = 0);

INSERT INTO #TempProdottiAggregati (Id)
(SELECT Id
 FROM mod_SHOP_Prodotti
 WHERE Id IN (SELECT Id FROM #TempProdotti)
   AND ProdottoAggregato = 1);



SELECT *
FROM #TempProdotti;
SELECT *
FROM #TempProdottiAggregati;
SELECT *
FROM #TempCorsiSingoli;

DROP TABLE #TempProdotti;
DROP TABLE #TempProdottiAggregati;
DROP TABLE #TempCorsiSingoli;

当我运行查询时,如果在两个临时表之一中没有找到任何内容,它只会返回一个空表:

如果不满足条件,是否有一种干净的方法可以在 Id 上返回 NULL

【问题讨论】:

  • 仅供参考,没有必要像那样将 SELECT 语句括在括号中,这实际上使它们读起来有点混乱,因为它使它们看起来像子查询。
  • 那么,如果查询没有返回任何行,您是否期望将 INSERTNULL 放入表中?或者如果临时表中没有行,您是否希望在后面的SELECTs 中返回值NULL
  • @Larnu 正好是第二个。我需要将插入“主”中的 ID 拆分为两个临时 ID,如果两个查询之一没有结果,则可能返回 null

标签: tsql split temp-tables


【解决方案1】:

一种方法是从具有NULL值行的数据集中获取LEFT JOIN

SELECT TP.*
FROM (VALUES(NULL))V(N)
     LEFT JOIN #TempProdotti TP ON 1 = 1;

如果#TempProdotti包含行,则返回表中的数据。如果不是一行,NULLs 将被返回。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多