【问题标题】:MySql select inside another select?MySql 在另一个选择中选择?
【发布时间】:2011-06-02 22:56:55
【问题描述】:

有什么办法吗?

SELECT sum(price) from table2 WHERE id=(SELECT theid FROM table1 WHERE user_id="myid")

我有用户购买的带有物品 ID 的 table1。我想计算用户购买的所有物品的总和。

上面的查询合法吗?如果不是,正确的形式是什么?

【问题讨论】:

    标签: mysql select


    【解决方案1】:

    where id=(SELECT 更改为where id IN (SELECT

    或者你真正想要的可能是:

    SELECT sum(price) FROM table2 INNER JOIN table1 ON table2.id = table1.theid WHERE table1.user_id = 'my_id'
    

    【讨论】:

      【解决方案2】:

      JOIN 会更具可读性:

      SELECT SUM(price) FROM table2
      INNER JOIN table1 ON table2.id = table1.theid
      WHERE table1.user_id = "myid"
      

      【讨论】:

      • 并允许大量优化
      【解决方案3】:

      你也可以使用 JOIN 语法

      SELECT sum(price) from table2 t2
      join table1 t1 on t1.theID = t2.id
      WHERE t1.user_id="myid"
      

      应该给你同样的结果

      【讨论】:

        【解决方案4】:

        您应该使用 SQL JOIN 来提供该功能。

        SELECT SUM(table2.price) JOIN table1 ON
        table2.id=table1.theid WHERE table1.user_id="myid"
        

        【讨论】:

          【解决方案5】:

          你的查询没问题,只要subselect每次只返回一行。

          如果返回的行数更多,您必须将查询更改为:

          [...] WHERE id IN (SELECT [...]
          

          注意:在您的情况下,像其他人建议的简单内部连接会更可修改(并且可能会更快一点) - 但您所写的内容绝对没问题(有总是有多种方法来获得所需的结果 - 现在总是很容易判断哪个是“最好的”;-))

          【讨论】:

            猜你喜欢
            • 2016-07-22
            • 2012-03-05
            • 2020-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-19
            • 1970-01-01
            相关资源
            最近更新 更多