如何在Oracle中选择两个表时正确进行子查询?

时间:2017-10-30 02:04:51

标签: database oracle

我需要从表中进行子查询,以查找在同一城市的同一部门工作的所有员工,但我没有得到它。

我有以下表格:

表部门

DEPARTMENTS

department_id
department_name
location_id

表格位置

LOCATIONS

location_id
street_address
postal_code
city
state_province
country_id

表员工

EMPLOYEES

employee_id
first_name
last_name
email
phone_number
hire_date
job_id
department_id

我现在的代码是这样的:

SELECT
    firt_name,
    department_id,
    job_id
FROM employees
WHERE state_province = (SELECT state_province FROM locations
                        WHERE state_province = 'Sao Paulo');

问题在于,虽然我想从表state_province中选择locations,但我无法从表employees中选择名称,部门ID和作业ID。如何在进行子查询时选择两个表?

无论如何,对不起,如果我在代码中做错了什么,我不熟悉子查询。

2 个答案:

答案 0 :(得分:2)

您可以尝试在两个表之间进行连接:

SELECT
    e.firt_name,
    e.department_id,
    e.job_id,
    l.*             -- replace with columns you really want
FROM employees e
INNER JOIN locations l
    ON e.state_province = l.state_province
WHERE
    e.state_province = 'Sao Paulo';

我不知道您要从locations中选择哪些列,但仅仅state_province仅为employees进行加入真的没有意义,因为{{ 1}}表已有此列。所以我只是将location.*作为占位符包含在内,您可以用实际需要的列替换它。

修改

连接是IMO的方法,但是如果你绝对需要使用子查询,那么你可以将当前子查询从WHERE子句移动到SELECT子句:

SELECT
    firt_name,
    department_id,
    job_id,
    (SELECT l.state_province FROM locations l
     WHERE e.state_province = l.state_province) state_province
FROM employees e;

请注意,只有在有一个匹配的省份时才会有效。出于这个原因和性能原因,我的连接查询可能就是您想要在实践中使用的内容。

答案 1 :(得分:1)

我认为在您的情况下,可能没有必要进行子查询。 连接表可以解决问题。

$rg = 'jasonauto'
$resources = Get-AzureRmResource | ?{ $_.ResourceGroupName -eq 'jasonauto' } | select -expandpropert resourcename 
foreach($resource in $resources){$ln = 'YouWontDelete' + $resource;
$resourcetype = (Get-AzureRmResource -ResourceGroupName 'jasonauto' -ResourceName $resource ).resourcetype;
New-AzureRmResourceLock -LockLevel CanNotDelete -LockName $ln -resourceName $resource -ResourceType $resourcetype -resourceGroupName $rg -force -verbose}