我有两个表,如下所示
表1
Name | Code
John | X11
Jane | CFT
Scot | KIT
表2
Name | Code
Kate | FX5
Jake | 1JI
Pete | GTS
我要在一个查询中实现的是如何检查是否在其中传递代码,因此必须同时检查表并仅返回匹配的代码。 例如
Select Name
from Table 2
where Code='X11
表2中没有上面的代码,所以我没有结果,但是下面有代码
Select Name
from Table 1
where Code='X11'
这会给我我想要的john的输出。
我如何合并两个查询,只是要检查哪个表中存在哪个代码,然后它只能从该表中返回名称值
答案 0 :(得分:3)
您也可以尝试以下操作。
SELECT *
FROM (SELECT *
FROM table1
UNION ALL
SELECT *
FROM table2) t1
WHERE code = 'X11'
答案 1 :(得分:2)
使用union all
:
Select Name
from Table2
where Code = 'X11'
union all
Select Name
from Table1
where Code = 'X11';
答案 2 :(得分:2)
如果只需要2个表中的1个结果,则可以使用COALESCE()
:
SELECT COALESCE(
(SELECT Name FROM Table1 WHERE Code='X11'),
(SELECT Name FROM Table2 WHERE Code='X11')
) Name
这样,如果在第一张表中找到'X11'
,将不会扫描第二张表。
答案 3 :(得分:1)
样本数据
DECLARE @Table1 AS TABLE
(Name VARCHAR(100),
Code VARCHAR(100)
)
INSERT INTO @Table1
SELECT 'John' , 'X11' UNION ALL
SELECT 'Jane' , 'CFT' UNION ALL
SELECT 'Scot' , 'KIT' UNION ALL
SELECT 'Jane' , 'TFT'
DECLARE @Table2 AS TABLE
(Name VARCHAR(100),
Code VARCHAR(100)
)
INSERT INTO @Table2
SELECT 'Kate' , 'FX5' UNION ALL
SELECT 'Jake' , 'X11' UNION ALL
SELECT 'Jane' , 'SER' UNION ALL
SELECT 'Pete' , 'KIT'
使用交叉应用获得预期结果的sql代码,该代码用于查找将在两个表中都匹配的多个代码
SELECT t1_Name,
t2_Name,
Code
FROM
(
SELECT
CASE WHEN t.Code = a.Code THEN t.Name ELSE NULL END AS t1_Name,
CASE WHEN t.Code = a.Code THEN a.Name ELSE NULL END AS t2_Name,
t.Code AS Code,
CASE WHEN t.Code = a.Code THEN 1 ELSE 0 END AS Flag
FROM @Table1 t
CROSS APPLY
(
SELECT Name,Code FROM @Table2 t2
) AS a
)dt WHERE Flag = 1
结果
t1_Name t2_Name Code
*************************
John Jake X11
Scot Pete KIT