在SQL Server中加入两个表的同时获取更多记录

时间:2018-08-10 11:52:31

标签: sql-server join

我有两个表,EMPEMP_DETAILS在ETL解决方案中使用。

在第一个序列中,将以下查询添加到一些默认值之后,将它们写入到临时(临时)表中。

SELECT 
    EMP_DETAILS.EMP_NO, 
    EMP_DETAILS.EMPID_NO, 
    EMP_DETAILS.ADDR1,  
    EMP_DETAILS.ADDR2, 
    EMP_DETAILS.START_DTTM, 
    EMP_DETAILS.END_DTTM, 
    EMP_DETAILS.CREATE_DTTM, 
    EMP_DETAILS.ARCHV_FLAG AS EMP_DET_ARCHV_FLAG, 
    EMP.ARCHV_FLAG AS EMP_ARCHV_FLAG
FROM
    EMP_DETAILS, EMP 
WHERE
    EMP_DETAILS.EMP_NO = EMP.EMP_NO
    AND ISNULL(EMP.ARCHV_FLAG,'N') = 'N'
    AND ISNULL(EMP_DETAILS.ARCHV_FLAG,'N') = 'N'

ARCHV_FLAG是一个标志,指示记录是已存档还是已停用)

第二个序列使用下面的查询来获取更多(存档)记录,这些记录在stg表中不存在。

SELECT 
    EMP_DETAILS.EMP_NO, 
    EMP_DETAILS.EMPID_NO, 
    EMP_DETAILS.ADDR1, 
    EMP_DETAILS.ADDR2, 
    EMP_DETAILS.START_DTTM, 
    EMP_DETAILS.END_DTTM, 
    EMP_DETAILS.CREATE_DTTM,  
    EMP_DETAILS.ARCHV_FLAG AS EMP_DET_ARCHV_FLAG, 
    EMP.ARCHV_FLAG AS EMP_ARCHV_FLAG
FROM
    EMP_DETAILS, EMP 
WHERE
    EMP_DETAILS.EMP_NO = EMP.EMP_NO
    AND NOT EXISTS (SELECT 'x'
                    FROM STG_EMP_TEMP STG 
                    WHERE STG.EMP_NO = EMP_DETAILS.EMP_NO)

(以上查询是由工作时间更长的开发人员编写的,所以我不知道要实现什么。)

现在,我正在尝试合并序列,所以我使用如下所示的联接来合并两个查询:

SELECT * FROM (
SELECT 
EMP_DETAILS.EMP_NO, 
EMP_DETAILS.EMPID_NO, 
EMP_DETAILS.ADDR1, 
EMP_DETAILS.ADDR2, 
EMP_DETAILS.START_DTTM, 
EMP_DETAILS.END_DTTM, 
EMP_DETAILS.CREATE_DTTM, 
EMP_DETAILS.ARCHV_FLAG AS EMP_DET_ARCHV_FLAG, 
EMP.ARCHV_FLAG AS EMP_ARCHV_FLAG
FROM EMP_DETAILS ,EMP 
WHERE EMP_DETAILS.EMP_NO = EMP.EMP_NO
)A
left join (
SELECT EMP.EMP_NO FROM
FROM EMP_DETAILS ,EMP 
WHERE EMP_DETAILS.EMP_NO = EMP.EMP_NO
AND ISNULL(EMP.ARCHV_FLAG,'N') = 'N'
AND ISNULL(EMP_DETAILS.ARCHV_FLAG,'N') = 'N'
) B
on isnull(A.EMP_NO,'') = isnull(B.EMP_NO,'')
and B.EMP_NO is null

但是,使用组合的SQL,我得到了一些其他的归档记录,这些记录不是使用先前的解决方案提取的。

我的加入方式是否正确?

TIA!

1 个答案:

答案 0 :(得分:0)

如果您只想结合两个查询的结果,则可以使用use Google\Cloud\Storage\StorageClient; /** * Upload a file. * * @param string $bucketName the name of your Google Cloud bucket. * @param string $objectName the name of the object. * @param string $source the path to the file to upload. * * @return Psr\Http\Message\StreamInterface */ function upload_object($bucketName, $objectName, $source) { $storage = new StorageClient(); $file = fopen($source, 'r'); $bucket = $storage->bucket($bucketName); $object = $bucket->upload($file, [ 'name' => $objectName ]); printf('Uploaded %s to gs://%s/%s' . PHP_EOL, basename($source), $bucketName, $objectName); }

UNION