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