2017-09-28 9 views
1

私たちは、私は次のことを試してみましたCIVILIDを複製し、今私は自分の名前がEMP表からサブクエリを使用してカウントステートメントからリストする方法

にマッチ見つけたいたTOTEMPテーブル内の一部の従業員が

SELECT P.FIRSTNAME,ID 
FROM EMP p 
where exists (SELECT CIVILID, COUNT (CIVILID) 
       FROM TOTEMP AS D 
       group by CIVILID 
       HAVING (COUNT (CIVILID) >1)) 

はEMPからすべてのレコードを選択します問い合わせる持っていますテーブル

は)私は、IN文を試してみました

SELECT P.FIRSTNAME,p.ID 
FROM EMP p ,UDFEMP k 
where p.ID in (SELECT CIVILID ,COUNT (CIVILID) 
       FROM TOTEMP AS D 
       group by CIVILID 
       HAVING (COUNT (CIVILID) >1)) 

サブクエリがEXISTSで導入されていない場合、選択リストで指定できる式は1つだけです。

よろしく

enter image description here

+0

EXISTSクエリには、相関サブクエリが必要です。 IN問合せには、1つの列CIVILIDのみを含むサブ選択が必要です。 – jarlh

+0

サンプルデータを提供したり、定義済みのスキーマを持つsqlfiddleを作成してください。それは本当に役に立ち、問題の解決を容易にします。 –

+0

@Harshil、質問を更新しました。 – aryan

答えて

1
SELECT p.FIRSTNAME,p.ID,d.CIVILID 
    FROM EMP p inner join TOTEMP d 
    on p.id = d.id 
    where d.CIVILID in (select CIVILID from TOTEMP 
         group by CIVILID having count(ID)>1); 

それが役に立てば幸い!

+0

ステートメントは、単一のレコードを複数回だけ一覧表示します – aryan

+0

クエリを編集しました。見てみな。 –

+0

今回は、empテーブルの最初のレコードを返します – aryan

0

これはexistsinの両方の演算子で実行できますが、両方のクエリに問題があります。

existsバリアントはpdとの関係が欠落しています。

SELECT p.firstname, p.id 
FROM emp p 
WHERE EXISTS (SELECT * 
       FROM  totemp d 
       WHERE p.id = d.civilid -- Here! 
       GROUP BY civilid 
       HAVING COUNT(civilid) > 1) 

inバリアントは、ちょうど内側のクエリでidを選択するために、複数の列を必要はない(とと結合交差する必要はありません。 udfemp):

SELECT p.firstname, p.id 
FROM emp p 
where p.id in (SELECT civilid 
       FROM  totemp 
       GROUP BY civilid 
       HAVING COUNT(civilid) > 1) 
+0

存在がエラーを返しました.nvarchar値 '260110101612'の変換がint列をオーバーフローしました。 – aryan

+0

in文はempテーブルから1レコードしか返しません – aryan

+0

は 'p.id'と' d.civilid'の異なるデータ型ですか? – Mureinik

関連する問題