SQL Server:当一行符合条件时,从多行中选择值

时间:2017-05-01 11:33:37

标签: sql sql-server select

我有一个表products,一个特定产品可能包含不同的模型,模型0代表基本模型:

Select * 
From products 
Where product_number = 12345;

结果:

id  made_by product_number  model     
----------------------------------
122 U123    12345           0  
123 U123    12345           1  
124 U552    12345           2

现在我想找到一些模型中基本模型(model = 0)made_by值不同的产品?

在这个例子中,我非常有兴趣在结果中使用此产品12345。

关于我想到的事情是选择明显和数量,但也许有更好的方法?

2 个答案:

答案 0 :(得分:1)

您可以使用exists子查询检查同一made_by的其他product_number

select  product_number
from    YourTable yt1
where   yt1.model = 0
        and exists
        (
        select  *
        from    YourTable yt2
        where   yt1.product_number = yt2.product_number
                and yt2.made_by <> yt1.made_by
        )

答案 1 :(得分:1)

存在是一种更好的方法,但您可以使用自己join进行此操作,如下所示

Resterster sample

select t1.*
    from products t1
inner join 
    products t2
on 
    t1.product_number=t2.product_number
    and t1.made_by<>t2.made_by
    and t1.model<>0
    and t2.model=0; 

样本数据

从产品中选择*;

+-----+---------+----------------+-------+
| id  | made_by | product_number | model |
+-----+---------+----------------+-------+
| 122 | U123    |          12345 |     0 |
| 123 | U123    |          12345 |     1 |
| 124 | U552    |          12345 |     2 |
| 125 | U5      |          12346 |     0 |
| 126 | U5      |          12346 |     1 |
| 127 | U6      |          12347 |     0 |
| 128 | U7      |          12347 |     1 |
+-----+---------+----------------+-------+

输出

+-----+---------+----------------+-------+
| id  | made_by | product_number | model |
+-----+---------+----------------+-------+
| 124 | U552    |          12345 |     2 |
| 128 | U7      |          12347 |     1 |
+-----+---------+----------------+-------+