视图中具有静态值的另一个表中的SQL Server列

用户名

有没有一种方法可以让另一个表中的列的值在View>示例中始终相同:

SELECT *, 
   (SELECT value FROM tblStudentPrefixes WHERE PrefixName = 'SeniorPrefix')
   AS StudentPrefix
FROM tblStudents

上面的嵌套查询会在每一行执行吗?有没有一种方法可以执行一次并用于所有行。

请注意,我在说的是View,而不是存储过程。我知道这可以在存储过程中完成。

加雷斯

这实际上取决于您的表设置。除非prefixName被限制为唯一,否则您可能会遇到错误,子查询将返回多个行。如果不是唯一的,而是恰好是唯一的,SeniorPrefix那么您的查询将被执行1000次。为了说明这一点,我使用了以下DDL:

CREATE TABLE #tblStudents (ID INT IDENTITY(1, 1), Filler CHAR(100));
INSERT #tblStudents (Filler)
SELECT TOP 10000 NULL
FROM sys.all_objects a, sys.all_objects b;

CREATE TABLE #tblStudentPrefixes (Value VARCHAR(10), PrefixName VARCHAR(20));
INSERT #tblStudentPrefixes (Value, PrefixName) VALUES ('A Value', 'SeniorPrefix');

运行查询将提供以下IO输出:

表'#tblStudentPrefixes'。扫描计数10000,逻辑读取10000

表'#tblStudents'。扫描计数1,逻辑读取142

密钥是tblStudentPrefixes上的1000个逻辑读取。不被限制为唯一的另一个问题是,如果重复,则查询将失败,并显示以下错误:

子查询返回了1个以上的值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,这是不允许的。

如果不能限制PrefixName唯一性,则可以使用以下命令停止对每一行的执行并避免错误TOP

SELECT *, 
   (SELECT TOP 1 value FROM #tblStudentPrefixes WHERE PrefixName = 'SeniorPrefix' ORDER BY Value)
   AS StudentPrefix
FROM #tblStudents

IO现在变为:

表'#tblStudentPrefixes'。扫描计数1,逻辑读取1

表'#tblStudents'。扫描计数1,逻辑读取142

但是,我仍然建议在这里切换到CROSS JOIN:

SELECT  s.*, p.Value AS StudentPrefix
FROM    #tblStudents AS s
        CROSS JOIN 
        (   SELECT TOP 1 value 
            FROM #tblStudentPrefixes 
            WHERE PrefixName = 'SeniorPrefix'
            ORDER BY Value
        ) AS p;

检查执行计划表明,使用表假脱机进行子选择对于单个值来说是非常不必要的:

在此处输入图片说明

因此,总而言之,它取决于表的设置是否将针对每一行执行,但是不管您是否向优化器提供了更好的机会(如果您切换到交叉联接)。


编辑

鉴于您需要从in中tblstudent没有匹配项的情况下返回行,并且当前的构造不唯一,因此最好的解决方案是:SeniorPrefixtblStudentPrefixesPrefixName

SELECT *, 
   (SELECT MAX(value) FROM #tblStudentPrefixes WHERE PrefixName = 'SeniorPrefix')
   AS StudentPrefix
FROM #tblStudents;

如果您确实要限制它的唯一性,那么以下3个查询将产生(基本上)相同的计划和相同的结果,这只是个人喜好:

SELECT *, 
   (SELECT value FROM #tblStudentPrefixes WHERE PrefixName = 'SeniorPrefix')
   AS StudentPrefix
FROM #tblStudents;

SELECT  s.*, p.Value AS StudentPrefix
FROM    #tblStudents AS s
        LEFT JOIN #tblStudentPrefixes AS p
            ON p.PrefixName = 'SeniorPrefix';

SELECT  s.*, p.Value AS StudentPrefix
FROM    #tblStudents AS s
        OUTER APPLY 
        (   SELECT Value
            FROM #tblStudentPrefixes 
            WHERE PrefixName = 'SeniorPrefix'
        ) AS p;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更改列的值取决于SQL Server中另一个表的值

来自分类Dev

从另一个表中添加具有初始值的列

来自分类Dev

如何从另一个具有最小值的表中更新列?

来自分类Dev

从另一个表中添加具有初始值的列

来自分类Dev

如何在另一个表ssms中更新具有相同值的列?

来自分类Dev

用另一个表SQL Server中的值替换列中的NA

来自分类Dev

将具有标准值的另一个表的列中的所有记录插入到表中

来自分类Dev

从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值

来自分类Dev

在我的SQL查询中,如何有一个包含从另一个表查询的值的列?

来自分类Dev

SQL:在某些列中选择具有值的行,并且该值不包含在另一个表中

来自分类Dev

SQL Server:查询以将数据从具有不同结构的另一个表插入表中

来自分类Dev

查询以基于另一个表的值获取列值,即一个表值在另一个表中具有字段名称

来自分类Dev

SQL-从另一个表中选择两次具有不同值的列

来自分类Dev

SQL Server 2008-用另一个表中的值替换列中的文本值

来自分类Dev

如何将列中具有特定值的行复制到另一个工作表?

来自分类Dev

将具有一个工作表中的值的动态变量列复制并粘贴到另一个工作表中

来自分类Dev

在sqlalchemy中从具有多个列的另一个表更新表

来自分类Dev

创建具有从另一个表索引的值的新列

来自分类Dev

访问:具有来自另一个表的值的UPDATE列

来自分类Dev

从另一个表SQL Server更新值

来自分类Dev

如何使用SQL将具有不同选择条件的多列插入到另一个表中

来自分类Dev

将一个表中的值插入到 SQL Server 中的另一个表中

来自分类Dev

从另一个表SQL更新列值

来自分类Dev

在 SQL Server 中另一个表的段落中的列中搜索术语

来自分类Dev

当一个表具有大量数据而另一个表具有少量数据时,在SQL Server中联接两个表

来自分类Dev

根据与另一个SQL Server表的匹配更新列中的所有条目

来自分类Dev

根据与另一个SQL Server表的匹配更新列中的所有条目

来自分类Dev

Sqlite:从具有多个条件的另一个表中的多个列更新

来自分类Dev

使用另一个表中的值填充SQL中的列

Related 相关文章

  1. 1

    更改列的值取决于SQL Server中另一个表的值

  2. 2

    从另一个表中添加具有初始值的列

  3. 3

    如何从另一个具有最小值的表中更新列?

  4. 4

    从另一个表中添加具有初始值的列

  5. 5

    如何在另一个表ssms中更新具有相同值的列?

  6. 6

    用另一个表SQL Server中的值替换列中的NA

  7. 7

    将具有标准值的另一个表的列中的所有记录插入到表中

  8. 8

    从表中选择所有行,除了具有相同 id 的另一个表中的行在另一列中具有特定值

  9. 9

    在我的SQL查询中,如何有一个包含从另一个表查询的值的列?

  10. 10

    SQL:在某些列中选择具有值的行,并且该值不包含在另一个表中

  11. 11

    SQL Server:查询以将数据从具有不同结构的另一个表插入表中

  12. 12

    查询以基于另一个表的值获取列值,即一个表值在另一个表中具有字段名称

  13. 13

    SQL-从另一个表中选择两次具有不同值的列

  14. 14

    SQL Server 2008-用另一个表中的值替换列中的文本值

  15. 15

    如何将列中具有特定值的行复制到另一个工作表?

  16. 16

    将具有一个工作表中的值的动态变量列复制并粘贴到另一个工作表中

  17. 17

    在sqlalchemy中从具有多个列的另一个表更新表

  18. 18

    创建具有从另一个表索引的值的新列

  19. 19

    访问:具有来自另一个表的值的UPDATE列

  20. 20

    从另一个表SQL Server更新值

  21. 21

    如何使用SQL将具有不同选择条件的多列插入到另一个表中

  22. 22

    将一个表中的值插入到 SQL Server 中的另一个表中

  23. 23

    从另一个表SQL更新列值

  24. 24

    在 SQL Server 中另一个表的段落中的列中搜索术语

  25. 25

    当一个表具有大量数据而另一个表具有少量数据时,在SQL Server中联接两个表

  26. 26

    根据与另一个SQL Server表的匹配更新列中的所有条目

  27. 27

    根据与另一个SQL Server表的匹配更新列中的所有条目

  28. 28

    Sqlite:从具有多个条件的另一个表中的多个列更新

  29. 29

    使用另一个表中的值填充SQL中的列

热门标签

归档