按多列结果搜索
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
像这样使用查询的正确方法是什么?
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