我需要一些帮助来查询MySQL3.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)
但这导致了其他评论员(而不是这个特定的评论员)审查的摘要根本没有显示给他。
我的问题是我不知道当时允许什么。。。
最佳答案
如果没有旧的安装,我不能尝试这样做,但请尝试在ON子句中检查reviewerid。
SELECT *
FROM abstracts
LEFT OUTER JOIN reviewdata
ON abstracts.id=reviewdata.abstractid
AND reviewerid='$userid'
WHERE session='$session'