我有两个表,EMP
和EMP_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!
答案 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