2016-06-22 2 views
0

別のテーブルのデータと比較するテーブル から一意の列(重複を削除する)を取る方法を理解できません。私の場合どのようにして/ clusingと別のテーブルとの比較を使用して一意の行を選択することができます

私は2つのテーブル

enter image description here

を持っている私は、[テーブルビューアで最初にその服用のProductID後viewerid取っ としてtblviewerでcompireing後tblproductからユニークな行を取得したいですビューアテーブルは、tblproductとコンパイルした後に表示されます。

actualyような

iは= 123 2行viewerisを取る場合のProductIDこのtblproductの商品コードその後12001 & 11001を選択し、finalyた加工へtblproductから行を取ります。

select * 
from  tblproduct 
where productid = 
(
    select distinct(productid) 
    from tblviewer 
    where viewerid = 123 
) 
+1

「select distinct」を使ってみましたか? –

+0

あなたの期待する結果は何ですか? – Siyual

+1

'='を 'に'に変更する – techspider

答えて

1

を使用する必要はありません、あなただけのIN句を使用したいと思います。あなたは結果をフィルタリングするために、テーブルに標準INNER JOIN操作を行うことができます。

Select Distinct P.* 
From tblProduct P 
Join tblViewer V On V.ProductId = P.ProductId 
Where V.ViewerId = 123 

を別の方法として、あなたにもEXISTSを使用することができます - これは完全にDISTINCTを使用する必要がなくなり:

Select * 
From tblProduct P 
Where Exists 
(
    Select * 
    From tblViewer V 
    Where V.ProductId = P.ProductId 
    And  V.ViewerId = 123 
) 

または、他の回答で提案されているようにも、INを使用することができます。

Select * 
From tblProduct 
Where ProductId In 
(
    Select ProductId 
    From tblViewer 
    Where ViewerId = 123 
) 
+0

パフォーマンスビューからこのソリューションは他の回答よりも優れたパフォーマンスを示します – RezaRahmati

+0

nice answer @siyual –

0

私はこれを行うには、いくつかの方法がありますが、明確な

select * 
from  tblproduct 
where productid in 
(
    select productid 
    from tblviewer 
    where viewerid = 123 
) 
0

私はあなたが求めているのかわからないんだけど、I と思うと、となります。

select * 
from  tblproduct 
where productid in 
(
    select distinct(productid) 
    from tblviewer 
) 
関連する問題