Mysql 将右联接替换为左联接的派生表
如何使用左连接编写此查询。因为我使用的框架不支持右连接,所以我需要重写查询。谁能给我一个可能的解决办法吗Mysql 将右联接替换为左联接的派生表,mysql,left-join,derived-table,Mysql,Left Join,Derived Table,如何使用左连接编写此查询。因为我使用的框架不支持右连接,所以我需要重写查询。谁能给我一个可能的解决办法吗 select Audit.history_id,Audit.field,modifiedtime,operation from Audit right join (select History.history_id from History where refid=2000000020088 order by modifiedtime limit 5) as Hist on Audit.hi
select Audit.history_id,Audit.field,modifiedtime,operation from Audit right join (select History.history_id from History where refid=2000000020088 order by
modifiedtime limit 5) as Hist on Audit.history_id=Hist.history_id;
desc Audit
+------------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------+------+-----+---------+-------+
| AUDIT_ID | bigint(19) | | PRI | 0 | |
| HISTORY_ID | bigint(19) | | MUL | 0 | |
| FIELD | varchar(50) | | | |
| OLD_VALUE | varchar(50)| YES | | NULL | |
| NEW_VALUE | varchar(50)| YES | | NULL | |
+------------------+------------+------+-----+---------+-------+
desc History
+---------------+-------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------------------+-------+
| HISTORY_ID | bigint(19) | | PRI | 0 | |
| REFID | bigint(19) | | MUL | 0 | |
| OPERATION | varchar(50) | YES | | NULL | |
| MODIFIED_TIME | datetime | | | 0000-00-00 00:00:00 | |
+---------------+-------------+------+-----+---------------------+-------+
不确定这是否会产生与您现在的输出完全相同的输出,但它可能会给您一个正确的想法:
选择Audit.history\u id、Audit.field、history.modifiedtime、history.operation
来自历史
审核时左键加入审核。历史记录\u id=历史记录。历史记录\u id
其中History.refid=200000020088
按历史顺序。modifiedtime
只需切换左连接的关系: 实际上,很少使用显式的右外部联接,因为它们总是可以被左外部联接替换(在表顺序切换的情况下),并且不提供额外的功能
来源:查询看起来有点奇怪:您总是会从历史记录中获取前五条记录,其中refid=20000002008,而不考虑历史记录id。是否应该:从历史中选择History.History\u id,其中refid=20000002008,History.History\u id=Audit.History\u id按修改的时间限制排序5???将有更多的历史条目,最初我显示前5个,然后显示下5个,然后继续。确定,但每个审核记录都将始终与子查询返回的前五条记录合并。每个历史记录可能有零个或一个或多个审核条目。啊,好的,正确的合并让我感到困惑;-)
select
Audit.history_id,Audit.field,modifiedtime,operation
from
(
select History.history_id
from History where refid=2000000020088
order by modifiedtime limit 5
) as Hist
left join Audit on (Audit.history_id = Hist.history_id);