使用where的子查询

时间:2016-07-23 20:46:54

标签: mysql sql

使用下表 ![架构]

只要有需要,它也可以很容易地用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
  )
)

我不确定这是否正确,我如何为其增加最低的雇佣收入。

2 个答案:

答案 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)
    )
)