Sql 我试图在每一行中返回特定的值,这取决于该行中的不同值是否已经在不同的表中

Sql 我试图在每一行中返回特定的值,这取决于该行中的不同值是否已经在不同的表中,sql,conditional,row,Sql,Conditional,Row,我仍然是SQL的n00b,遇到了麻烦。我所拥有的是根据特定条件在临时表中初始选择特定ID: SELECT DISTINCT ID INTO #TEMPTABLE FROM ICC WHERE ICC_Code = 1 AND ICC_State = 'CA' 在后面的查询中,我选择了一个不同且更长的ID列表以及其他表中的其他数据。这个SELECT大约有20列宽,是我的结果集。我希望能够做的是向该结果集中添加一个额外的列,该列的每个值为TRUE或FALSE。如果行中的ID是可诱惑的,则附加列的值

我仍然是SQL的n00b,遇到了麻烦。我所拥有的是根据特定条件在临时表中初始选择特定ID:

SELECT DISTINCT ID
INTO #TEMPTABLE
FROM ICC
WHERE ICC_Code = 1 AND ICC_State = 'CA'
在后面的查询中,我选择了一个不同且更长的ID列表以及其他表中的其他数据。这个SELECT大约有20列宽,是我的结果集。我希望能够做的是向该结果集中添加一个额外的列,该列的每个值为TRUE或FALSE。如果行中的ID是可诱惑的,则附加列的值应为TRUE。如果不是,则为假。这样,添加的列将在每一行上准备好TRUE或FALSE,这取决于每一行中的ID是否处于可诱惑状态

第二个选择类似于:

SELECT ID,
       ColumnA,
       ColumnB,
       ...
       NEWCOLUMN
FROM ...
每行的NEWCOLUMN值将取决于返回的该行中的ID是否处于可诱惑状态

这里有人有什么建议吗

谢谢,


Matt

您需要将结果查询左键连接到ID上的可诱惑项,如果有ID,这将为您提供ID,如果没有,则为NULL,如果需要1或0,这将适用于SQL Server isNullTestable.ID,00

关于性能编码的几点注意事项:

根据定义,ID列是唯一的,因此DISTINCT是冗余的,并且会导致不精确的处理,除非它是来自另一个表的ID

为什么要将其存储到临时表中,而不是直接在查询中使用它


您需要将结果查询左键连接到ID上的可诱惑项,如果有,这将为您提供ID;如果没有,则为NULL;如果需要1或0,这将适用于SQL Server isNullTestable.ID,00

关于性能编码的几点注意事项:

根据定义,ID列是唯一的,因此DISTINCT是冗余的,并且会导致不精确的处理,除非它是来自另一个表的ID

为什么要将其存储到临时表中,而不是直接在查询中使用它


如果您将join留给了诱惑,您将在ID不存在的地方得到一个NULL

SELECT ID,
       ColumnA,
       ColumnB,
       ...
       T.ID IS NOT NULL AS NEWCOLUMN -- Gives 1 or 0 or True/false as a bit
FROM ... X
LEFT JOIN #TEMPTABLE T
ON T.ID = X.ID -- DEFINE how the two rows can be related unquiley

如果您将join留给了诱惑,您将在ID不存在的地方得到一个NULL

SELECT ID,
       ColumnA,
       ColumnB,
       ...
       T.ID IS NOT NULL AS NEWCOLUMN -- Gives 1 or 0 or True/false as a bit
FROM ... X
LEFT JOIN #TEMPTABLE T
ON T.ID = X.ID -- DEFINE how the two rows can be related unquiley

可以使用联合和子查询

Select . . . . , 'TRUE'
From . . .
Where ID in 
(Select id FROM #temptable)
UNION
SELECT . . . , 'FALSE'
FROM . . .
WHERE ID NOT in 
(Select id FROM #temptable)
因此,在顶部,选择。。。从…起其中ID在子查询中,如果ID在您的表中,则进行选择

如果ID不在可诱惑列表中,则底部进行选择


UNION运算符将两个结果很好地连接起来,因为两个SELECT语句将返回相同数量的列。

您可以使用UNION和子查询

Select . . . . , 'TRUE'
From . . .
Where ID in 
(Select id FROM #temptable)
UNION
SELECT . . . , 'FALSE'
FROM . . .
WHERE ID NOT in 
(Select id FROM #temptable)
因此,在顶部,选择。。。从…起其中ID在子查询中,如果ID在您的表中,则进行选择

如果ID不在可诱惑列表中,则底部进行选择


UNION运算符将两个结果很好地结合在一起,因为两个SELECT语句都将返回相同数量的列。

若要扩展其他人对UNION的说法,请执行类似操作

SELECT id, TRUE AS myColumn FROM  `table1` 
UNION 
SELECT id, FALSE AS myColumn FROM  `table2` 

要扩展别人对Union的看法,只需这样做

SELECT id, TRUE AS myColumn FROM  `table1` 
UNION 
SELECT id, FALSE AS myColumn FROM  `table2` 

嘿,戴尔,我用术语说得很松散。它不是真正的ID列。此外,我还考虑直接查询并加入我已经放在临时表中的内容。我可能会转而接受你的建议。谢谢嘿,戴尔,我用术语说得很松散。它不是真正的ID列。此外,我还考虑直接查询并加入我已经放在临时表中的内容。我可能会转而接受你的建议。谢谢