按多列结果搜索

Search by results of multiple columns

像这样使用查询的正确方法是什么?

 SELECT Project_name,
  FROM [Table 1]
  WHERE Project_id in
      (SELECT ID_1, ID_2, ID_3, ID_4, ID_5
       FROM [Table 2])

即按 select 2 列或更多列的结果搜索

根据你的问题,你可以尝试使用 exists 而不是 in

如果此查询没有达到您的预期。

能否提供一些示例数据,期待结果,对你的问题的更多解释让你清楚。

SELECT Project_name,
FROM [Table 1]
WHERE exists
(
select 1 FROM [Table 2]
WHERE Project_id = ID_1 or 
      Project_id = ID_2 or
      Project_id = ID_3 or
      Project_id = ID_4 or
      Project_id = ID_5 
)

使用apply:

  SELECT Project_name,
  FROM [Table 1]
  WHERE Project_id in
  (SELECT v.value FROM [Table 2]
   cross apply (values(ID_1), 
                      (ID_2), 
                      (ID_3), 
                      (ID_4), 
                      (ID_5))v(value))

我建议在第二个 table 上使用 Unpivot。

架构:

CREATE TABLE #PROJECTS(ID INT IDENTITY,NAME VARCHAR(10))
INSERT INTO #PROJECTS
VALUES('A'),('B'),('C'),('D'),('E'),('F'),('G')

CREATE TABLE #PROJECT_DETAIL(ID INT IDENTITY, P1 INT,P2 INT,P3 INT )
INSERT INTO #PROJECT_DETAIL
VALUES(1,4,5),(2,5,2),(3,1,4)

现在执行逆透视 #PROJECT_DETAIL 并在 IN 运算符中使用逆透视 ID 列。

SELECT * FROM #PROJECTS
WHERE ID IN (
SELECT PROJECT_IDS FROM #PROJECT_DETAIL
UNPIVOT
(
    PROJECT_IDS FOR PROJECTS IN ([P1],[P2],[P3])
)UP
)

结果:

ID  NAME
1   A
2   B
3   C
4   D
5   E