相关疑难解决方法(0)

如何在MySQL中模拟数组变量?

似乎是MySQL没有数组变量.我应该用什么呢?


似乎有两种选择建议:集类型标量临时表.我联系的问题暗示了前者.但是使用这些而不是数组变量是一种好习惯吗?或者,如果我使用集合,那么基于集合的成语相当于foreach什么?

mysql arrays variables set temp-tables

76
推荐指数
7
解决办法
29万
查看次数

使用select中的索引在MySQL中创建临时表

我有一个存储函数,我使用临时表.出于性能原因,我需要该表中的索引.不幸的是,我无法使用,ALTER TABLE因为这会导致隐式提交.

所以我在寻找的语法来添加INDEXtempid创建过程中.任何人都可以帮忙吗?

CREATE TEMPORARY TABLE tmpLivecheck 
(
    tmpid INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
)
SELECT *
FROM   tblLivecheck_copy
WHERE  tblLivecheck_copy.devId = did;
Run Code Online (Sandbox Code Playgroud)

mysql ddl temp-tables

62
推荐指数
3
解决办法
9万
查看次数

mysql - 从多列中获取两个最大值

我们可以使用GREATEST从以下多个列中获取最大价值

SELECT GREATEST(mark1,mark2,mark3,mark4,mark5) AS best_mark FROM marks
Run Code Online (Sandbox Code Playgroud)

但现在我希望得到所有(5)分的两个最佳分数.

我可以在mysql查询上执行此操作吗?

表结构(我知道它是错的 - 由某人创建):

student_id  | Name | mark1 | mark2 | mark3 | mark4 | mark5
Run Code Online (Sandbox Code Playgroud)

mysql sql

8
推荐指数
1
解决办法
1718
查看次数

Mysql:从子查询中按最大N值排序

我准备好了.

前言:我想用任何N做这个工作,但为了简单起见,我将N设置为3.

我有一个查询(特别是MySQL)需要从表中提取数据并根据该表中的前3个值进行排序,然后再回退到其他排序条件.

所以基本上我有这样的东西:

SELECT tbl.id 
FROM
  tbl1 AS maintable 
  LEFT JOIN 
  tbl2 AS othertable 
  ON
  maintable.id = othertable.id
ORDER BY 
  othertable.timestamp DESC, 
  maintable.timestamp DESC
Run Code Online (Sandbox Code Playgroud)

这是所有基本的教科书.但问题是我需要第一个ORDER BY子句才能获得othertable.timestamp中的三个最大值,然后回退到maintable.timestamp.

另外,执行LIMIT 3子查询以进行其他操作并加入它是不行的,因为这需要处理应用于维护的任意数量的WHERE条件.

我几乎能够使用这样的基于用户变量的方法,但它失败了,因为它没有考虑到排序,因此它将获得它找到的第一个三个其他值:

ORDER BY 
  (
    IF(othertable.timestamp IS NULL, 0, 
      IF(
        (@rank:=@rank+1) > 3, null, othertable.timestamp
      )
    )
  ) DESC
Run Code Online (Sandbox Code Playgroud)

(声明前面有@rank:= 0)

那么......有关于此的任何提示吗?我对这个问题失去了理智.我对此的另一个参数是,因为我只是在改变现有的(非常复杂的)查询,所以我不能执行包装外部查询.另外,如上所述,我使用MySQL,因此任何使用ROW_NUMBER函数的解决方案都是不可及的.

感谢所有提前.

编辑.这里有一些带有时间戳的示例数据,这些数据简化为更简单的整数,以说明我需要的内容:

maintable

id      timestamp
1       100
2       200
3       300
4       400
5       500
6       600

othertable

id     timestamp
4      250
5      350
3      550
1      700

=>

1 …
Run Code Online (Sandbox Code Playgroud)

mysql sql

8
推荐指数
1
解决办法
306
查看次数

在 InnerJoin 中重用 mysql 子查询

我正在尝试优化查询,试图避免重复用“ COMPLEX QUERY ”指示的查询,该查询使用了两次,并且两次都有相同的结果。

原始查询

SELECT news.* 
FROM   news 
   INNER JOIN((SELECT myposter 
               FROM   (SELECT **COMPLEX QUERY**)) 
              UNION 
              (SELECT myposter 
               FROM   `profiles_old` prof2 
               WHERE  prof2.profile_id NOT IN (SELECT **COMPLEX QUERY**))) r 
           ON news.profile = r.p 
Run Code Online (Sandbox Code Playgroud)

我想知道这样的事情是否可能:

SELECT news.* 
FROM   (SELECT **COMPLEX QUERY**) complexQuery, 
   news 
   INNER JOIN ((SELECT myposter 
                FROM   complexquery) 
               UNION 
               (SELECT myposter 
                FROM   `profiles_old` prof2 
                WHERE  prof2. profile NOT IN (SELECT myposter 
                                              FROM complexQuery))) r 
           ON news. profile = r.p 
Run Code Online (Sandbox Code Playgroud)

Mysql 是否对该类型的查询进行某种缓存?

mysql sql performance database-performance query-performance

4
推荐指数
1
解决办法
6953
查看次数

SELECT * INTO <不存在的表>- MYSQL

我试图将 select 语句的结果移动到一个新的不存在的表中,但无法弄清楚如何移动。

在 MS SQL 中,我将遵循以下内容,

SELECT * INTO <NON_EXISTING_TABLE> FROM
(
SELECT * FROM TABLE1 A 
JOIN TABLE2 B
ON A.DescriptionNo = B.DescriptionNo 
WHERE A.DescriptionNo =1) A
Run Code Online (Sandbox Code Playgroud)

当我快速查找时,我只能看到将数据插入现有表的答案,而不能使用该语句的结果动态创建新表。

请指教 !

mysql sql

0
推荐指数
1
解决办法
6420
查看次数

SQL 查询获取单个列“名称”,其值与具有相同列“名称”的其他两个表不同

有两张表,分别是猫和狗,两张表中的每只宠物都有“id”和“name”。该架构可以从下面理解:

TABLE 'dogs'
    id INTEGER NOT NULL PRIMARY KEY,
    name VARCHAR (50) NOT NULL
TABLE 'cats'
    id INTEGER NOT NULL PRIMARY KEY,
    name VARCHAR (50) NOT NULL
Run Code Online (Sandbox Code Playgroud)

问题要求“编写一个查询来选择所有不同的 pet.name”

mysql sql

-10
推荐指数
1
解决办法
1万
查看次数