2016-04-26 7 views
5

私は(人々が一つのテーブルがあるので、雇用は別である)の会社で働いている人とその雇用情報が含まれている2つのテーブルを持っています。 Peopleテーブルには、人の在り方、緊急連絡先、電話番号bla bla blaに関する情報が含まれています。雇用表には、彼がどこで働いているか、最寄りの上司などに関する情報が含まれています。 これらのテーブルは壊れており、ミスステイクによっていくつかの重複が含まれています。両方のテーブルにPerson IDがありますが、Employment IDはEmploymentにのみあります。私は両方の数字が重複しているすべての人に欲しいです。次の値を返すは廃墟に参加]を選択し

SELECT DISTINCT 
    pp.Personid, 
    pp.Firstname, 
    pp.Lastname, 
    pp.Address, 
FROM People pp 
JOIN People pp2 
    ON pp.Firstname = pp2.Firstname 
    AND pp.Lastname = pp2.Lastname 
    AND pp.Address = pp2.Address 
    AND pp.Personid <> pp2.Personid 
ORDER BY pp.Firstname, pp.Lastname, pp.Personid 

(しかし、あなたが見ることができるように雇用数は含まれません):

これは完璧に動作

1001 Carl Johnsson Bigstreet 1 
1002 Carl Johnsson Bigstreet 1 
1003 Carl Johnsson Bigstreet 1 
1010 Andrew Wilkinsson Smallstreet 2 
1011 Andrew Wilkinsson Smallstreet 2 

を今、私はそれに参加雇用のIDを追加しますテーブルは次のようになります:

SELECT DISTINCT 
    pp.Personid, 
    e.Employmentid, 
    pp.Firstname, 
    pp.Lastname, 
    pp.Address, 
FROM People pp 
JOIN People pp2 
    ON pp.Firstname = pp2.Firstname 
    AND pp.Lastname = pp2.Lastname 
    AND pp.Address = pp2.Address 
    AND pp.Personid <> pp2.Personid 
JOIN Employment e on pp.Personid = e.Personid 
ORDER BY pp.Firstname, pp.Lastname, pp.Personid 

そして、すべてがh ** lに次のr esult:

1001 1111 Carl Johnsson Bigstreet 1 
1001 1111 Carl Johnsson Bigstreet 1 
1001 1111 Carl Johnsson Bigstreet 1 
1010 1234 Andrew Wilkinsson Smallstreet 2 
1010 1234 Andrew Wilkinsson Smallstreet 2 

あなたは私がPERSONIDとEmploymentidの両方を見ることができますが、今、私はそれぞれ1つだけを取得する(正しい回数を繰り返した)ので、私は私のリストにすべての異なるPERSONIDとEmploymentidを持っていないとして。

なぜですか?

何が私のパーティーをクラッシュしたことに参加して起こったのか?

+0

どのようなSQL dialect/RDBMSですか? – Dummy00001

+0

これは、MS SQL Server 2012のMS SQLで書かれています。 –

+0

'Person'が複数回' '採用できるのかどうかチェックしましたか? – William

答えて

1

[OK]を、のは、いくつかのサンプルデータを作成してみましょう。

CREATE TABLE #People (PersonID int, FirstName varchar(50), LastName varchar(50), Address1 varchar(50)) 

INSERT INTO #People (PersonID, FirstName, LastName, Address1) 
VALUES 
('1','Mike','Hunt','Cockburn Crescent') 
,('2','Mike','Hunt','Cockburn Crescent') 
,('3','Mike','Hunt','Cockburn Crescent') 
,('4','Connie','Lingus','Dyke Close') 
,('5','Connie','Lingus','Dyke Close') 
,('6','Eric','Shun','Tickle Avenue') 
,('7','Ivana','Humpalot','Bottom Street') 

CREATE TABLE #Employment (PersonID int, EmploymentID int) 

INSERT INTO #Employment (PersonID, EmploymentID) 
VALUES 
('1','10') 
,('2','11') 
,('3','12') 
,('4','13') 
,('5','14') 
,('6','15') 
,('7','16') 

あなたは、サブ選択で重複をうまく場合、私はそれが容易になるだろう、あなたは何の問題も雇用テーブルに参加することができます、異なった最初のクエリにしてください。

SELECT pp.PersonID 
    ,em.EmploymentID 
    ,pp.FirstName 
    ,pp.LastName 
    ,pp.Address1 
FROM #People pp 
JOIN (
    SELECT FirstName 
     ,LastName 
     ,Address1 
     ,COUNT(1) records 
    FROM #People 
    GROUP BY FirstName 
     ,LastName 
     ,Address1 
    HAVING COUNT(1) > 1 
    ) pp2 ON pp.FirstName = pp2.FirstName 
    AND pp.LastName = pp2.LastName 
    AND pp.Address1 = pp2.Address1 
LEFT JOIN #Employment em ON pp.PersonID = em.PersonID 

一時テーブルをクリーンアップすることを忘れないでください。

DROP TABLE #People 
DROP TABLE #Employment 
+1

これは私の問題を多く解決しました!なぜ私のバージョンがうまくいかなかったのか、ちょっと不思議で... –

+0

EH !?このDIDNTは私の問題を解決します。それだけでそれを解決した... ??? –

+0

質問:期待どおりに表示されないユーザーのデータで質問を更新してください。人物のすべての列とEmploymentのすべての列を1人のユーザーのデータで表示します。私たちはそこから解決することができます。 –

0

私はあなたがこの

SELECT DISTINCT 
      ep.Personid, 
      ep.Employementid, 
      ep.FirstName, 
      ep.LastName, 
      ep.Address 
FROM Person P join 
(SELECT 
    pp.Personid, 
    e.Employmentid, 
    pp.Firstname, 
    pp.Lastname, 
    pp.Address, 
from PP 
JOIN Employment e on pp.Personid = e.Personid) ep 
on 
    P.Firstname = ep.Firstname 
    AND P.Lastname = ep.Lastname 
    AND P.Address = ep.Address 
    AND P.Personid <> ep.Personid 
ORDER BY P.Firstname, P.Lastname, P.Personid 

に卿を試みるべきだと思うあなたのコードは動作するはずですし、私は私が作ってきたデータを使用して問題を再現することができません

+0

これは私自身の2番目のテーブルと同じ問題を生みます。つまり、Personidは何も変わりません。 –

0

をチェックして、私に返信してください。あなたが見ている結果は、雇用表にcarl johnssonに対する複数の個人IDがあり、雇用者IDが異なっていることを示唆しています。 テーブル定義とサンプルデータを提供できますか?

関連する問題