我有一个支出表和一个日期表,它们由date_id和id联合...

我想做的是,从1个查询中获得支出的所有信息,再加上所有支出的总和,但有一个限制和/或偏移量

这是现在的查询

SELECT spendings.id, spendings.price, spendings.title, 
       dates.date, users.username, currencies.value,
       ( SELECT SUM(sum_table.price) 
         FROM (
             SELECT s.price
             FROM spendings s, dates d
             WHERE s.date_id = d.id 
               AND day(d.date) = 25
             LIMIT 2 OFFSET 0
         ) as sum_table
       ) AS sum_price
FROM spendings, dates, users, currencies
WHERE spendings.date_id = dates.id 
  AND day(dates.date) = 25 
  AND spendings.user_id = users.id 
  AND spendings.curr_id = currencies.id
LIMIT 2 OFFSET 0

产量

id  price   title   date       username value  sum_price
3   6.00    title1  2013-11-25 alex     €      21.00
4   15.00   title2  2013-11-25 alex     €      21.00

它有效,但day(d.date) = 25是此处的日期day(d.date) = 25与此处的外层day(dates.date) = 25

如果取而代之的是我将day(d.date) = day(dates.date)放在逻辑上,那我会得到#1054 - Unknown column 'dates.date' in 'where clause'

如果有人想简化这个,请告诉我:)

===============>>#1 票数:1 已采纳

尝试加入而不是使用嵌套的相关子查询:

SELECT spendings.id, spendings.price, spendings.title, 
      dates.date, users.username, currencies.value,
      y.sum_price
FROM spendings, dates, users, currencies
JOIN (
    SELECT day, SUM(sum_table.price) As sum_price
    FROM (
        SELECT day(d.date) As day,
               s.price
        FROM spendings s, dates d
        WHERE s.date_id = d.id 
          AND day(d.date) = 25
        LIMIT 2 OFFSET 0
    ) sum_table
    GROUP BY day
) y
ON y.day = day(dates.date)
WHERE spendings.date_id = dates.id 
  -- AND day(dates.date) = 25 <== commented since it's redundant now
  AND spendings.user_id = users.id 
  AND spendings.curr_id = currencies.id

一些说明:


不建议对逗号使用旧的FROM table1,table2,table2 WHERE语法: FROM table1,table2,table2 WHERE
表示连接的推荐方式是“新的” ANSI SQL连接语法:

FROM table1
[left|right|cross|[full] outer|natural] JOIN table2 {ON|USING} join_condition1
[left|right|cross|[full] outer|natural] JOIN table3 {ON|USING} join_condition2
....

实际上,这种“新语法”现在已经很老了,因为据我所记得,它是在1992年-22年前发布的。 在IT行业中,22年就像22岁。


  ask by C Alex translate from so

未解决问题?本站智能推荐:

3回复

MySQL:在任何子查询中

如何重组此查询: ...看起来更像是以下内容: 注:所有3子查询从相同的选择tbl t ,但他们选择不同的列中的每个。 为了通过一些具体示例进一步阐明子查询: subquery1: SELECT col1 FROM tbl WHERE value=100 subquery2
1回复

多个否定子查询的更好方法

我有一些这样定义的表: Members_to_delete表包含成员的子集。 我仅在members_to_delete表中既不存在sender_id也非收件人的情况下,才选择(并最终删除)消息表中的所有行。 所以我想到了这个丑陋的查询: 我认为必须有一种更好的方法来编写此
2回复

MYSQL内部联接并从子查询中获取价值

好的,我尝试比较两个表,然后输入三分之一名称的列表,以生成前10天的总值。 查询运行,但给我一个NULL结果,只有一个结果。 如果我从数据库中删除DATE_ADD并将其替换为实际日期,并为left子句添加一个值,而不是使用子查询,那么我会得到我正在寻找的特定日期。 我想做的是创建一个名称列
4回复

MySQL:在多个子查询中使用“In”?

我正在尝试使用此查询: 哪会产生错误: 我希望MySQL合并所有子查询的结果,并使用共同的值作为主查询中的IN子句。 因此,如果第一个子查询返回1,2,4而第二个子查询返回2,3,4,那么“in”子句将读取: 因为2和4是两个子查询共有的值。 一个查询可以实现
1回复

带有多个子查询的MYSQL

嗨,谢谢您的阅读。 一旦有了这些,我需要执行一些SELECTS来提供thisID的数量,我只需要从表1中选择thisID和thisNAME。 我必须承认我在编写查询方面的工作有点超出我的深度...但是我确定Im正确吗? 有什么帮助吗?
8回复

MySQL将DELETE FROM与子查询作为条件

我正在尝试这样的查询: 你可以告诉我,如果同一个tid有其他父母,我想删除1015的父关系。 但是,这会产生语法错误: 我检查了文档,并自行运行子查询,这一切似乎都检查出来。 任何人都可以弄清楚这里有什么问题吗? 更新 :如下所述,MySQL不允许您正在删除的表在子查询
2回复

如何在mysql查询中传递逗号分隔的值?

我正在使用子查询来获取所有qcode,并将其作为参数传递给mysql中的另一个查询。 但是内部查询返回的值是- 那么如何解析它以IN子句传递另一个查询?
1回复

MySQL子查询运行而不是返回错误

我遇到了一些奇怪的mysql子查询问题... 我的问题是: 使用item_distributor = 176查询更新的ENTIRE表site_plugin_products_items的结果 如果我单独运行子查询: 我收到以下错误,因为我输入了错误的字段,这应该是va
2回复

MySQL在IN条件下使用UNION子查询删除

我遇到了一个奇怪的SQL错误。 最后一个查询不起作用。 当然,我可以将DELETE分为三个查询,但是我真的很奇怪,为什么MySQL不允许我这样做。 一个小例子: 作品! 也可以! 而 引发错误 #1064-您的SQL语法有误; 检查与您的MyS
2回复

MySQL子查询导致服务器挂起

我正在尝试执行以下查询 外部查询返回大约4000个响应,而内部查询返回29。当在我的Web服务器上执行时,什么也没发生,当我在本地对其进行测试时,mysql最终使用100%CPU,但仍然没有任何反应。 大小可能是原因吗? 具体来说,这会导致服务器永远挂起,我相当确定运行查询的We