0

従業員情報を格納する 2 つのテーブルがある状況に遭遇しました。Table1 は従業員で、table2 はサード パーティの一時雇用者です。これらのテーブルでは、ID に異なる規則が使用されています (私が制御できるものではありません)。

問題は、これらのサード パーティの派遣社員が採用されることが多く、これらのテーブル間にリンクがないことです。これが発生した場合、テーブルを作成する前にそれらが Table2 に存在しないことを確認する必要があります。現時点では、DOB と Last 4 で一致を特定したいだけですが、おそらく少なくともファーストネームを基準に追加するつもりですが、今はどこかから始めたいと思っています.

名前は異なりますが、列は同じです (DOB = 生年月日、コード = Last 4)

CREATE TABLE Table1
 ([Emp_ID] int, [DOB] date, [code] varchar(10))
;

INSERT INTO Table1
 ([Emp_ID], [DOB], [code])
VALUES
 (55556, '1966-01-15', '5454'),
 (55557, '1980-03-21', '6868'),
 (55558, '1985-04-26', '7979'),
 (55559, '1990-10-17', '1212'),
 (55560, '1992-12-30', '6767')
;

CREATE TABLE Table2
 ([USer_ID] int, [Birth_Date] date, [last4] varchar(10))
;

INSERT INTO Table2
 ([User_ID], [Birth_Date], [last4])
VALUES
 (22223, '1966-01-15', '5454'),
 (22224, '1980-03-21', '6868'),
 (22225, '1975-07-19', '4545'),
 (22226, '1988-05-24', '3434')
;

これが私が思いついたものです。うまくいくようですが、この一致を生成しているtable2からuser_idを返す必要がありますか?

SELECT *
FROM table1 t1 
WHERE EXISTS (SELECT 1 FROM table2 t2 WHERE t1.DOB = t2.Birth_date)
AND EXISTS (SELECT 1 FROM table2 t2 WHERE t1.code = t2.last4)

ありがとう!

4

1 に答える 1

1

これを試して

結合なし:

SELECT t1.*,
(SELECT user_id FROM table2 t2 
              WHERE t1.DOB = t2.Birth_date and t1.code = t2.last4) user_id
FROM table1 t1 
WHERE EXISTS (SELECT 1 FROM table2 t2 
              WHERE t1.DOB = t2.Birth_date and t1.code = t2.last4)

結合あり

SELECT t1.*, t2.user_id
FROM table1 t1 
inner join table2 t2 on t1.DOB = t2.Birth_date and t1.code = t2.last4

SQLデモ

于 2014-01-31T16:39:31.400 に答える