【问题标题】:how can select unique row using where/having cluse and compare with another table如何使用 where/have 子句选择唯一行并与另一个表进行比较
【发布时间】:2016-06-22 20:44:07
【问题描述】:

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

就我而言

我有两张桌子

在使用 tblviewer 编译后,我想从 tblproduct 中获取唯一的行 [在表查看器中首先获取viewerid,然后在查看器表中获取productid,然后与tblproduct进行编译。

其实是这样的

如果我取 vieweris=123 两行 productid 选择 12001&11001 之后,此 tblproduct productid 并最终从 tblproduct which macing 中取行。

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

【问题讨论】:

  • 您是否尝试过使用select distinct
  • 您的预期结果是什么?
  • 将您的 = 更改为 in

标签: sql sql-server


【解决方案1】:

有几种方法可以做到这一点。您可以对表格执行标准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
)

【讨论】:

  • 从性能的角度来看,这个解决方案比其他答案有更好的性能
  • 不错的答案@siyual
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      相关资源
      最近更新 更多