如何使用where / having cluse选择唯一行并与另一个表

时间:2016-06-22 20:44:07

标签: sql sql-server

我无法理解如何从表中获取唯一列(删除重复) 与另一个表数据进行比较。

在我的情况下

我有两张桌子

enter image description here

我希望在与tblviewer合作后从tblproduct获取唯一行 [在表格查看器中首先使用了查看者,然后在查看器表格中使用了产品,然后与tblproduct相符。

就像那样

如果我采用vieweris = 123两行productid选择12001& 11001之后,这个tblproduct productid并最终从tblproduct进行加工。

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

3 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。您可以对表格执行标准select * from tblproduct where productid in ( select productid from tblviewer where viewerid = 123 ) 来过滤结果:

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

答案 1 :(得分:0)

我认为你只想使用IN子句,你不需要使用不同的

internal

答案 2 :(得分:0)

我不确定你在问什么,但我认为是,

select   * 
from     tblproduct 
where    productid in
(
    select distinct(productid) 
    from   tblviewer 
)