当前位置: 首页 > 知识库问答 >
问题:

MySQL-子查询问题-无法重用表

蓝华皓
2023-03-14
WITH t as (
SELECT *
            FROM scd p
            WHERE  p.modified_date > FROM_UNIXTIME(1593060230)
                AND ( p.main_id = 1
                OR FIND_IN_SET(1, p.mult_ids) <> 0 )
            ORDER BY modified_date DESC
            LIMIT 2 OFFSET 0
),
del as (
SELECT 
* 
FROM t WHERE (status <> 1 AND status <> 2)
),
w_del as (
SELECT 
* 
FROM t WHERE (status = 1 OR status = 2)
)
SELECT w_del.*, del.* FROM w_del,del;

我如何用普通的子查询来实现这一点。 我使用的是MySQL5.7,不能使用CTE。 如果我使用联合/子查询,Im获取不能重用表错误。 有没有一种方法可以在没有临时桌子的情况下实现这一点?

请帮帮我。

共有1个答案

赏成益
2023-03-14

您可以插入每个别名的代码。 。。。一直这样做,直到你站在基台:

SELECT w_del.*, del.*
FROM (SELECT t.*
      FROM (SELECT *
            FROM scd p
            WHERE p.modified_date > FROM_UNIXTIME(1593060230) AND
                  ( p.main_id = 1 OR FIND_IN_SET(1, p.mult_ids) <> 0 )
            ORDER BY modified_date DESC
            LIMIT 2 OFFSET 0
           ) t
       WHERE (status <> 1 AND status <> 2)
      ) w_del CROSS JOIN
     (SELECT t.*
      FROM (SELECT *
            FROM scd p
            WHERE p.modified_date > FROM_UNIXTIME(1593060230) AND
                  ( p.main_id = 1 OR FIND_IN_SET(1, p.mult_ids) <> 0 )
            ORDER BY modified_date DESC
            LIMIT 2 OFFSET 0
           ) t
       WHERE (status = 1 OR status = 2)
      ) del;

不过,有一个关键点:T的定义使用了order bylimit。 如果modified_date列中存在关系,那么两个子查询可能返回不同的结果集。 您有两个选择来避免这里的问题:

  1. Order by添加额外的键,以确保排序是稳定的(即每次返回相同的结果,因为键的组合是唯一的)。
  2. 使用临时表实现子查询。
 类似资料:
  • 我有这个问题。我希望它从内容表中选择4个条目,并按如下方式对条目进行排序: > 选择最近的条目。它表示按日期排序(mysql datetime)DESC,id DESC。 从这4个选定项中,按likes(mysql INT)DESC排序 运行查询时,它返回错误的结果。它选择与此条件匹配的条目,其中主题='id'和活动='1'。它按likes DESC对条目进行排序,但忽略了这个条件,即按日期DES

  • 问题内容: 我试图更新MYSQL DB中的某些信息,但是我不确定如何在node.js中使用它。这是我正在使用的mysql驱动程序https://github.com/felixge/node- mysql 到目前为止我有什么 一切正常,除了… 在PHP中,我会有这个… 我不确定自己在做什么错,但是我很肯定问题在这里 问题答案: [ 注(加2016年4月29日): 这个答案已被接受,但事实证明,还有

  • 前面我们介绍了如何使用 SELECT、INSERT、UPDATE 和 DELETE 语句对 MySQL 进行简单访问和操作。下面在此基础上开始学习子查询。 子查询是 MySQL 中比较常用的查询方法,通过子查询可以实现多表查询。 子查询指将一个查询语句嵌套在另一个查询语句中。子查询可以在 SELECT、UPDATE 和 DELETE 语句中使用,而且可以进行多层嵌套。在实际开发时,子查询经常出现在

  • 我想创建一个名为的视图,该视图显示个人的所有信息,除了他们的客户ID之外,还列出每个人在他/她的帐户中有多少余额。 我的疑问是: 现在,这个查询将创建视图,但当我想通过以下命令查看该视图中的信息时: 它将返回一个错误: 如何走出这个误区?

  • 问题内容: 我有这个Mysql查询,它的工作原理: 结果是: 它可以正确执行,但仅当我将所需的ID硬编码到查询中时(37)。我希望它适用于m3allem表中的所有条目,因此我尝试这样做: 我得到一个错误: “ where子句”中的未知列“ m.id” 为什么?从MySql手册中: 所以…当子查询在SELECT部分​​中时,这不起作用吗?我什么都没读。 有人知道吗?我该怎么办?我花了很长时间来构建此

  • 问题内容: 我正在尝试将SQL转换为SQLAlchemy。我要查询的SQL版本如下: 我的SQLAlchemy查询如下: 我收到一个错误 如果我将SQLAlchemy查询调整为以下内容: 结果= query.all() 我得到一个错误 任何帮助,将不胜感激,谢谢! 问题答案: 一旦调用,就无法访​​问 对象 ,而只能通过访问器访问列。 而是执行以下操作:仅加载所需的列,以避免任何名称冲突: 然后在

  • 我有一个简单的查询,结尾如下... 它一点也不费力(当我使用 Sequel Pro 直接在我的 MySQL 数据库中运行它时,它会立即/正确运行)。 但当通过PHP文件运行时,它会返回一个500错误。我所要做的就是删除对DESC的引用(要么完全删除,要么替换为ASC),然后从DB中获取结果。 不过,我真的需要按降序排列结果,对这个非常奇怪的问题完全没有想法。 有没有人见过DESC关键字的类似行为?

  • 我有5个SQL表 存储 工作人员 部门 SOLD_Items staff_rating 我创建了一个视图,将这四个表连接在一起。最后一个表(staff_rating),我希望在接近项目被出售的时间(sold_items.date)获得视图行的rating列。我尝试了以下SQL查询,这些查询工作正常,但存在性能问题。 SQL查询1 SQL查询2 SQL查询%2比SQL查询%1快。但这两种方法都存在性