如何使用 where/have 子句选择唯一行并与另一个表进行比较
Posted
技术标签:
【中文标题】如何使用 where/have 子句选择唯一行并与另一个表进行比较【英文标题】:how can select unique row using where/having cluse and compare with another table 【发布时间】: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
【参考方案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
)
【讨论】:
以上是关于如何使用 where/have 子句选择唯一行并与另一个表进行比较的主要内容,如果未能解决你的问题,请参考以下文章
T-SQL 过于昂贵的查询,在 where/have 条件和复合主键中选择
在 thymeleaf 中添加和删除具有多个元素的动态行并与列表绑定