Объединение по одной колонке

self.urlSession.dataTask(with: request, completionHandler: { (data, response, error) in
            self.endNetworkActivity()

            var responseError: Error? = error
            // handle http response status
            if let httpResponse = response as? HTTPURLResponse {

                if httpResponse.statusCode > 299 , httpResponse.statusCode != 422  {
                    responseError = NSError.errorForHTTPStatus(httpResponse.statusCode)
                }
            }

            var apiResponse: Response
            if let _ = responseError {
                apiResponse = Response(request, response as? HTTPURLResponse, responseError!)
                self.logError(apiResponse.error!, request: request)

                // Handle if access token is invalid
                if let nsError: NSError = responseError as NSError? , nsError.code == 401 {
                    DispatchQueue.main.async {
                        apiResponse = Response(request, response as? HTTPURLResponse, data!)
                        let message = apiResponse.message()
                        // Unautorized access
                        // User logout
                        return
                    }
                }
                else if let nsError: NSError = responseError as NSError? , nsError.code == 503 {
                    DispatchQueue.main.async {
                        apiResponse = Response(request, response as? HTTPURLResponse, data!)
                        let message = apiResponse.message()
                        // Down time
                        // Server is currently down due to some maintenance
                        return
                    }
                }

            } else {
                apiResponse = Response(request, response as? HTTPURLResponse, data!)
                self.logResponse(data!, forRequest: request)
            }

            self.removeRequestedURL(request.url!)

            DispatchQueue.main.async(execute: { () -> Void in
                completionHandler(apiResponse)
            })
        }).resume()
1
задан Jeggy 16 January 2019 в 15:19
поделиться

2 ответа

Я не вижу необходимости в UNION здесь, я думаю, что FULL OUTER JOIN, скорее всего, обеспечит лучшее решение:

SELECT ISNULL(NN.ID,N.ID) AS ID,
       ISNULL(NN.[NAME], N.[NAME]) AS [Name],
       CASE WHEN NN.ID IS NOT NULL THEN 'NEW' ELSE 'OLD' END AS [From]
FROM dbo.NAMES N
     FULL OUTER JOIN dbo.NAMES_NEW NN ON N.ID = NN.ID;
0
ответ дан Larnu 16 January 2019 в 15:19
поделиться

Я бы использовал union all так:

select nn.id, nn.name, 'new' as which
from names_new nn
union all
select n.id, n.name, 'old' as which
from names_old n
where not exists (select 1 from names_new nn where nn.id = n.id);

Это сравнивает идентификаторы. Я не уверен, хотите ли вы сравнить идентификаторы или имена (или оба) для определения приоритетов.

0
ответ дан Gordon Linoff 16 January 2019 в 15:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: