mysql - 使用 3.23.58 版本的子查询重写 MySQL 查询

标签 mysql sql

我需要一些帮助来查询 MySQL 3.23.58 版的数据库。

原则上我想做这个查询(包括一些 php):

SELECT * 
FROM abstracts 
LEFT JOIN 
(SELECT * FROM reviewdata WHERE reviewerid='$userid') as reviewdata 
ON abstracts.id=reviewdata.abstractid  
WHERE session='$session'

换句话说,如果审稿人已经审阅过摘要,我想要一个包含所有摘要的列表以及摘要的审阅数据。否则我仍然想要摘要,但评论数据为空(以便他可以更改它)。

上面的查询在较新的版本中运行良好,但在这个旧版本中我不允许使用子查询,所以当我在 LEFT JOIN 中使用嵌套的 SELECT 时 MySQL 会报错。

所以现在我正在寻找一种方法来避免这种子查询...

我试过:

SELECT * 
FROM  abstracts 
LEFT JOIN reviewdata 
ON abstracts.id=reviewdata.abstractid  
WHERE session='$session' AND (reviewerid='$userid' or reviewerid is null) 

但这会导致其他审阅者审阅过的摘要,而不是该特定审阅者审阅过的摘要,根本不会为他显示。

我的问题是我不知道当时允许什么...

最佳答案

如果没有旧安装,我无法尝试此操作,但请尝试将对 reviewerid 的检查放在 ON 子句中。

SELECT * 
FROM abstracts 
LEFT OUTER JOIN reviewdata  
ON abstracts.id=reviewdata.abstractid  
AND reviewerid='$userid'
WHERE session='$session'

关于mysql - 使用 3.23.58 版本的子查询重写 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12910660/

相关文章:

mysql - 有 INNER JOIN 限制 - 第 2 部分吗?

mysql - 实现基于父ID关系的查询

MySQL DATE_SUB 不使用变量但使用常规值

mysql - 删除 SQL 中的 NULL 值 JOIN 和 SQL 中的 UNION 运算符

sql - 如何编写sql查询来获取与数据库中数据最匹配的数据

mysql - Oracle:需要帮助匹配多个条件,但将其视为一个条件

php - Laravel Eloquent ORM 查询

php - 如果同时有多个进程,如何处理 mysql 插入?

java - 如何在 Jtable 中显示数据库的选定列?

php - 查询从 postman 和 phpmyadmin 运行,但不是从 android 运行