3

単純な従業員データベースの列にこれに関するクエリを作成するように依頼されました。

ninumber-名-姓-アドレス-SuperVisorNiNumber

従業員と上司はすべて同じテーブルに保持され、ninumberによって参照されます。私が作成するように依頼されたクエリは次のとおりです。

v。NI番号、従業員の名前と姓、および上司を共有する上司のNI番号を検索し、従業員と上司の両方が部門8で作業します。実践2のクエリviで行われた従業員関係を2回参照します。 。結果は、「従業員NI番号」、「名」、「姓」、および「スーパーバイザーNI番号」というタイトルの列に表示される必要があります。

したがって、私はこのクエリを作成しました:

SELECT e1.ninumber,
       e1.fname,
       e1.minit,
       e1.lname,
       e1.address,
       e1.superNiNumber,
       COUNT(*) AS nrOfOccurences
FROM   employee AS e1,
       employee AS e2
WHERE  e1.dno = 8
   AND e1.superNiNumber = e2.ninumber
   AND e2.dno = 8
GROUP  BY e1.superNiNumber
HAVING COUNT(*) > 1

質問のこの部分、つまり「従業員がその上司をどこで共有するか」を解決するために、明確なクエリを実行することはできませんでした。このクエリは行のグループを返し、表示したい行の一部を非表示にします。

私の質問は次のとおりです。私の質問は質問に対して正しいですか。mySQLでNONDISTINCTクエリを実行して、データベースがすべてのフィールドをグループ化するのではなく返すようにすることはできますか。

私のクエリからのReutrnの結果

NInumber    fname  minit    lname   address    supervisorNiNum     number of occerences
666666601   Jill    J   Jarvis  6234 Lincoln, Antrim, UK    666666600   2
666666607   Gerald  D   Small   122 Ball Street, Letterkenny, IRL   666666602   3
666666604   Billie  J   King    556 WAshington, Antrim, UK  666666603   2

ありがとう。

4

2 に答える 2

3

結果テーブルの列の説明に、が表示されませんminit, address and number of occurrences。したがって、私はあなたの選択を次のように単純化します:

SELECT e1.ninumber,
       e1.fname,
       e1.lname,
       e1.superNiNumber,
FROM   employee AS e1,
       employee AS e2
WHERE  e1.dno = 8
       AND e1.superNiNumber = e2.ninumber
       AND e2.dno = 8
       and (select count(*) from employee e3
            where e3.superNiNumber = e1.superNiNumber) > 1;
于 2012-10-31T15:35:08.593 に答える
1

受け入れられた答えは、パフォーマンスがかなり遅いです。少し検索した後、私はなんとかより高速に実行される同等のものを作成することができました:

SELECT e1.ninumber,
       e1.fname,
       e1.lname,
       e1.superNiNumber
FROM   employee AS e1, (SELECT superNiNumber, 
                        COUNT(*) AS count 
                        FROM employee 
                        GROUP BY superNiNumber 
                        HAVING count > 1) AS e2
WHERE  e1.superNiNumber = e2.superNiNumber

クレジット:http ://www.programmingforums.org/thread14669.html

于 2015-03-23T21:43:17.333 に答える