1

我需要一些帮助来查询 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) 

但这会导致其他审稿人而不是该特定审稿人审阅的摘要根本不会显示给他。

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

4

2 回答 2

1

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

SELECT * 
FROM abstracts 
LEFT OUTER JOIN reviewdata  
ON abstracts.id=reviewdata.abstractid  
AND reviewerid='$userid'
WHERE session='$session'
于 2012-10-16T08:49:31.013 回答
0

从我的角度来看,您重构的查询应该显示所有审阅者的摘要,包括特定的审阅者。以下条件

 AND (reviewerid='$userid' or reviewerid is null) 

没有任何意义,可以直接删除。为了限制结果集与特定审阅者相关的数据,您必须排除or reviewerid is null部分尝试

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

另一个建议 - 在查询中指定字段时使用别名

于 2012-10-16T08:50:34.463 回答