如何在多个列上进行SELECT(例如2)?

时间:2015-06-07 08:55:53

标签: mysql sql database select having

SELECT DName
FROM drugs
WHERE DID IN 
(
    SELECT DID,SID
    FROM transactions
    GROUP BY TotalCost
    HAVING SID = 1 AND TotalCost > 100
)

在括号内执行此类查询将为我提供一个包含2列的结果,我需要从其中一列中选择结果。为了在HAVING子句中使用SID,我需要将其包含在括号内的SELECT运算符中,这就是为什么我得到2列的结果。

5 个答案:

答案 0 :(得分:0)

您在IN语句中不能有2列。 您只需从选择中删除SID,只在HAVING中使用它。您实际上并不需要检索数据,并且您的IN子句将起作用。

答案 1 :(得分:0)

如果我理解正确,那么你想要这样的东西:

SELECT DName
FROM drugs
WHERE (DID, SID) IN 
(
    //Subquery
)

答案 2 :(得分:0)

答案已更新。对不起我已经删除了我以前的答案。感谢ZoharPeled提醒我之前的回答是错误的。

如果我理解你的问题,这应该适合你:

SELECT DName
FROM drugs
WHERE DID IN (
    SELECT DID FROM(
        SELECT DID,SID,TotalCost
        FROM transactions
        GROUP BY TotalCost
        HAVING SID = 1 AND TotalCost > 100
    ) AS T
)

答案 3 :(得分:0)

您可以通过以下方式使用EXISTS

SELECT DName
FROM drugs
WHERE EXISTS
(
    SELECT *
    FROM transactions
    WHERE SID = 1 
    AND TotalCost > 100
    AND ( 
       drugs.DID = transactions.SID
       OR drugs.DID = transactions.DID
    )
)

答案 4 :(得分:0)

你有几个答案 - 但我会在戒指中添加一个替代选项:

select DName
  from drugs d
 inner join (
                SELECT DID
                  FROM transactions
                 WHERE SID = 1 
                   AND TotalCost > 100
             ) tx on d.Did =tx.Did

我认为(如果你使用像......那么我可以在这里修正)

  select *
    from table
   where EXISTS in ( // some subquery )

... EXISTS子句中的子查询必须为 table中的每个行运行。使用内部联接方法,RDBMS将为内联表执行一次sql,然后将结果保存在内存中以连接回另一个表。对于小桌子来说这很好 - 但是对于较大的桌子,可能会有很大的性能损失。