这似乎是MySQL没有数组变量.我应该用什么呢?
似乎有两种选择建议:集类型标量和临时表.我联系的问题暗示了前者.但是使用这些而不是数组变量是一种好习惯吗?或者,如果我使用集合,那么基于集合的成语相当于foreach什么?
我有一个存储函数,我使用临时表.出于性能原因,我需要该表中的索引.不幸的是,我无法使用,ALTER TABLE因为这会导致隐式提交.
所以我在寻找的语法来添加INDEX对tempid创建过程中.任何人都可以帮忙吗?
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) 我们可以使用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) 我准备好了.
前言:我想用任何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) 我正在尝试优化查询,试图避免重复用“ 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
我试图将 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)
当我快速查找时,我只能看到将数据插入现有表的答案,而不能使用该语句的结果动态创建新表。
请指教 !
有两张表,分别是猫和狗,两张表中的每只宠物都有“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”