2012-10-16 46 views
1

我需要一些MySQL版本3.23.58的数据库查询帮助。使用子查询重写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' 

在的话,我想所有的摘要与reviewdata的摘要合并列表如果审阅已经审查了。否则,我仍然想要抽象的,但空的reviewdata(所以他可以改变它)。

上述查询在较新版本中正常工作,但在旧版本中,我不允许使用子查询,所以当我在左连接中使用嵌套SELECT时,MySQL会抱怨。

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

我想:

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

但这会导致抽象由其他审阅审核,但不为这种特定的审查员,根本没有显示给他。

我的问题是,我不知道什么被允许回来然后......

回答

1

没有旧的安装,我不能试试这个,而是尽量把支票的ON子句中的reviewerid。

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

工作正常。谢谢! – Kaye

0

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

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

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

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

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