MySQL 联合、连接和限制

标签 mysql sql limit union

我有以下查询:

SELECT result.globalId AS id, result.date, p1.playerName AS player, p2.playerName AS   target, w.weaponIngameName AS weapon, result.headshot, s.serverName AS server, result.origin
FROM (
(

SELECT globalId, date, serverId, playerId, targetId, weaponId, headshot, 'playerkills' AS origin
FROM playerkills
WHERE (
playerkills.playerId =976
OR playerkills.targetId =976
)
ORDER BY date DESC
)
UNION (

SELECT globalId, date, serverId, playerId, NULL , NULL , NULL , 'playersuicides' AS origin
FROM playersuicides
WHERE (
playersuicides.playerId =976
)
ORDER BY date DESC
)
)result
LEFT JOIN players p1 ON result.playerId = p1.playerId
LEFT JOIN players p2 ON result.targetId = p2.playerId
LEFT JOIN weapons w ON result.weaponId = w.weaponId
LEFT JOIN servers s ON result.serverId = s.serverId
ORDER BY result.date DESC , result.globalId DESC

在应用任何 JOIN 之前,我想限制 result 联合最多有 300 个结果。我该如何实现?

(...) result 之后简单地添加 LIMIT 300 是行不通的,它会给出以下 MySQL 错误:You have an error in your SQL syntax ;查看与您的 MySQL 服务器版本对应的手册,了解在第 9 行的“LEFT JOIN players p1 ON result.playerId = p1.playerId LEFT JOIN players p2 ON r”附近使用的正确语法

最佳答案

将查询更改为以下内容时,它确实有效:

SELECT result.globalId AS id, result.date, p1.playerName AS player, p2.playerName AS   target, w.weaponIngameName AS weapon, result.headshot, s.serverName AS server, result.origin
FROM (
(

SELECT globalId, date, serverId, playerId, targetId, weaponId, headshot, 'playerkills' AS origin
FROM playerkills
WHERE (
playerkills.playerId =976
OR playerkills.targetId =976
)
ORDER BY date DESC
)
UNION (

SELECT globalId, date, serverId, playerId, NULL , NULL , NULL , 'playersuicides' AS origin
FROM playersuicides
WHERE (
playersuicides.playerId =976
)
ORDER BY date DESC
) ORDER BY date DESC LIMIT 300) result
LEFT JOIN players p1 ON result.playerId = p1.playerId
LEFT JOIN players p2 ON result.targetId = p2.playerId
LEFT JOIN weapons w ON result.weaponId = w.weaponId
LEFT JOIN servers s ON result.serverId = s.serverId
ORDER BY result.date DESC , result.globalId DESC

请注意,我在调用表 result 之前添加了 ORDER BY date DESC LIMIT 300,因此现在大致发生以下情况:

1) UNION 中的单个 SELECT 正在运行。

2) UNION 用于合并结果。

3) ORDER BYLIMIT 被应用于 UNION

4) UNION 被命名为result

5) 查询的其余部分发生。

关于MySQL 联合、连接和限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20175080/

相关文章:

PHP mySQL INSERT 语句使用具有整数值的变量

php - mysql删除datetime与系统时间最接近的数据

mysql - 有没有办法像Oracle一样将MYsql解释计划显示为树

mysql - 如何从shell/shell脚本获取sqlplus命令的输出状态?

mysql - SQL返回单个列中的所有相关行

php - 基本分页

python - 使用 mysql 写入表时如何处理 Broken Piper 错误?

sql - 有没有办法确定 SQL Server 存储过程返回记录集

mysql - SQL - ORDER BY ASC LIMIT 1 排除多个相同的结果 - 最好的方法?

matlab - 如何在matlab中随机生成极限[m,n]中的所有数字?