Sql 如何根据另一列中存在的特定值选择列值

Sql 如何根据另一列中存在的特定值选择列值,sql,sql-server,Sql,Sql Server,我有一个项目清单,以及为这些项目投标的不同公司 project_name company_name ­___________________________ abc | 1 abc | 2 abc | 3 def | 9 def | 7 ghi | 8 jkl |

我有一个项目清单,以及为这些项目投标的不同公司

project_name   company_name 
­___________________________     
    abc      |        1
    abc      |        2
    abc      |        3
    def      |        9
    def      |        7
    ghi      |        8
    jkl      |        1
    jkl      |        5
    jkl      |        6
    jkl      |        7
我只想保留公司1所在的项目,同时保留项目的其他竞争对手。预期的结果是:

project_name   company_name 
­___________________________     
    abc      |        1
    abc      |        2
    abc      |        3
    jkl      |        1
    jkl      |        5
    jkl      |        6
    jkl      |        7
我有一种感觉,在WHERE之后需要一个子查询来获得该结果,但我无法理解。

您可以使用exists:

您可以使用exists:

另一个选项是窗口函数,通常效率更高,因为它只需要对表进行一次扫描。我们可以在此处使用条件计数:

选择p* 从…起 选择*, countcase当company_name=1时,则1结束于按项目_name划分的分区1 来自项目 P 其中公司1>0; 另一个选项是窗口函数,通常效率更高,因为它只需要对表进行一次扫描。我们可以在此处使用条件计数:

选择p* 从…起 选择*, countcase当company_name=1时,则1结束于按项目_name划分的分区1 来自项目 P 其中公司1>0;
对于这种情况,这是最简单的查询:

select p.*
from projects p
where p.project_name in (select project_name from projects where company_name = 1)

对于这种情况,这是最简单的查询:

select p.*
from projects p
where p.project_name in (select project_name from projects where company_name = 1)

请告诉我们您的尝试。请告诉我们您的尝试。它很有效,非常感谢!很有效,非常感谢!