-1

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

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

即通过 2 列或更多列的选择结果进行搜索

4

3 回答 3

3

使用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))
于 2018-07-16T06:48:33.633 回答
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 
)
于 2018-07-16T06:43:54.960 回答
0

我建议在第二张桌子上使用 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)

现在在Operator中执行#PROJECT_DETAILunpivot 并使用 unpivoted ID 列。IN

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
于 2018-07-16T08:45:45.987 回答