使用下表 ![架构]
只要有需要,它也可以很容易地用OUTER JOIN替换。
WHERE语法是面向关系模型的更多。
两个表的结果JOIN'ed是应用过滤器的表的笛卡尔积,它只选择那些具有匹配连接列的行。
使用WHERE语法更容易看到这一点。
SELECT DISTINCT E_Fname, E_Lname
FROM EMPLOYEE E
WHERE E_id in (
SELECT E_id
FROM EMPLOYEE E, STORE S
WHERE E.E_id = S.Store_Manager_id
AND UPPER(STORE_SUBURB) = ‘ARMONK’
AND Store_id in (
SELECT toy_id
FROM TOY T, STORE S
WHERE T.toy_id = S.Store_id
)
)
我不确定这是否正确,我如何为其增加最低的雇佣收入。
答案 0 :(得分:0)
我会在没有where
条款的情况下接近它:
SELECT SUM(hireTransactionValue) as hireIncome, Store_ID, E_Lname, E_Fname
FROM (
SELECT Quantity * Hire_price as hireTransactionValue, Store_ID
FROM HireTransaction
JOIN Toy ON HireTransaction.Toy_id = Toy.Toy_id
) TransactionValues
JOIN Store ON Store.Store_id = TransactionValues.Store_ID
JOIN Employee ON store_ManagerID = E_id
GROUP BY Store_ID, E_Lname, E_Fname
ORDER BY hireIncome
<强>解释强>:
我们需要一个子查询来将租用交易数量与雇佣玩具的费率相结合。所以我们从那开始,我们所关心的只是交易价值以及它发生的商店。然后我们加入Store
以获取经理Employee
记录。然后,按商店分组SUM
所有这些交易值,并按总计交易值排序。
答案 1 :(得分:-1)
这是我的猜测,但我现在会建立表格以确认它有效。
SELECT DISTINCT store_id, E_Fname, E_Lname
FROM EMPLOYEE E, Store
WHERE E.E_id in(
SELECT E_id
FROM EMPLOYEE E, STORE S
WHERE E.E_id = S.Store_Managerid
AND UPPER(S.STORE_SUBURB) = 'ARMONK'
AND S.Store_id in(
SELECT store_id
FROM TOY T, STORE S
WHERE T.toy_id = S.Store_id
AND min(hire_price)
)
)