Tsql 子选择where子句标准

Tsql 子选择where子句标准,tsql,Tsql,正在为一个类处理我的第一个ETL分配,并且需要转换的insert查询的帮助,特别是获取要插入到转换表中的authorID。我收到的数据是: 我的转换表有3列,Bookvarchar50、ISBNvarchar50和authorint。 正确的author值需要来自author表,该表具有: idint,FirstNamevarchar35,LastNamevarchar35 子选择上的where子句需要什么 INSERT INTO TRANSFORM.NewBook SELECT

正在为一个类处理我的第一个ETL分配,并且需要转换的insert查询的帮助,特别是获取要插入到转换表中的authorID。我收到的数据是:

我的转换表有3列,Bookvarchar50、ISBNvarchar50和authorint。 正确的author值需要来自author表,该表具有: idint,FirstNamevarchar35,LastNamevarchar35

子选择上的where子句需要什么

INSERT INTO TRANSFORM.NewBook
    SELECT 
        nb.book,
        ISBN,
       (SELECT a.id 
           FROM Library.Author AS a
           WHERE nb.Author = ????????? AS Authorid
       FROM [EXTRACT].NewBook AS nb) 

您需要执行连接以获取所需的数据,该数据看起来位于作者的姓名上,因此我尝试:

INSERT INTO TRANSFORM.NewBook
        SELECT nb.book ,
               nb.ISBN ,
               a.id
        FROM   extract.newbook bn
               JOIN library.author a 
                   ON CONCAT_WS(' ' , a.firstname, a.lastName) = nb.author;

concat_ws适用于sqlserver 2017。您可以尝试CONCATa.firstname、、.lastName或a.firstname+''+a.lastName=nb.author

NewBook上有哪些列?对不起,Extract.NewBook有Bookvarchar50、ISBNvarchar50、批发商costvarchar50和authorvarchar50。看起来nb.author=CONCAT_WS''、a.firstname、a.lastName。。。传入数据中没有更多内容。00提升器,我在“,”附近收到了不正确的语法-插入到TRANSFORM.NewBook选择nb.book,ISBN,从Library中选择a.id。Author作为其中nb.Author='',a.FirstName,a.LastName作为AuthorId从[EXTRACT]中。NewBook作为nb启用Concat_WS函数需要做些什么吗?获取以下错误消息:Msg 195,级别15,状态10,第7行“CONCAT_WS”不是可识别的内置函数名。@ChrisM ah,它是一个较新的函数,因此可能不在您的服务器上。你可以试试a.firstname+“”+a.lastName=nb。author@ChrisM你有没有没有没有姓或名的作者?@maSTAShuFu这是一个很好的问题。为了解决这个问题,根据您的SQL版本,我们可以将整个过程包装在一个trim或ltrimrtrim@LordBaconPants您可以使用coalesce->coalesce firstname+''+lastname、isnulllastname、firstname