创建还具有子查询的动态查询

时间:2019-09-03 19:32:47

标签: sql sql-server

我在SQL Server中使用两个查询,我想合并并创建一个查询。尝试了几种选择,但没有成功。

查询1

select emp_id, name, age 
from employee 
where age > 50

查询2

select dept_id, dept_name 
from department 
where emp_id = 'COMPANY.ID' + emp_id

合并两个查询的问题是,尽管查询1可以返回多行,但是我无法使用子查询直接使用查询2中查询1的emp_id,因为查询中的emp_id 2的前缀为“ COMPANY.ID。” + emp_id。有什么建议吗?

COMPANY.ID是一个常量,在将其保存到部门表之前会被前缀为emp_id

示例员工表

emp_id      name       age
-----------------------------
123         John       45
345         Susan      34
789         Pat        66

部门表示例

emp_id                     dept_id                      dept_name
-----------------------------------------------------------------------
COMPANY.ID.123             123                           Accounting
COMPANY.ID.345             123                           Accounting

希望这些示例有助于理解我的数据集

3 个答案:

答案 0 :(得分:0)

这是你想要的吗 查询2是完全错误的,将永远不会匹配,而是使用%CompanyId%

    select distinct dept_id, dept_name 
   from 
    department where empid IN (
    select emp_id from 
   employee where age > 50 and empid 
  like '%CompanyId%' ) 

答案 1 :(得分:0)

我了解到您正在尝试撤出至少一名员工年龄超过50岁的部门。

一种解决方案是将EXISTS条件与相关子查询一起使用:

SELECT dept_id, dept_name
FROM department d
WHERE EXISTS (
    SELECT 1
    FROM employee e
    WHERE 
        CONCAT('COMPANY.ID.', e.emp_id) = d.emp_id
        AND e.age > 50
)

Demo on DB Fiddle

答案 2 :(得分:0)

您可以使用join合并两个表

SELECT d.dept_id, d.dept_name
FROM department d
INNER JOIN employee e
ON CONCAT('COMPANY.ID.', e.emp_id) = d.emp_id
WHERE e.age > 50
相关问题