我需要一些有关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(以便他可以改变它)。
上述查询在较新版本中运行正常但在旧版本中我不允许使用子查询,因此MySQL在LEFT JOIN中使用嵌套SELECT时会抱怨。
所以现在我正在寻找避免这个子查询的方法......
我试过了:
SELECT *
FROM abstracts
LEFT JOIN reviewdata
ON abstracts.id=reviewdata.abstractid
WHERE session='$session' AND (reviewerid='$userid' or reviewerid is null)
但是这导致其他评论者审查的摘要,但不是由这个特定的评论者审查,根本没有为他显示。
我的问题是我不知道当时允许什么......
答案 0 :(得分:1)
如果没有旧安装,我无法尝试这一点,但请尝试在ON子句中检查reviewerid。
SELECT *
FROM abstracts
LEFT OUTER JOIN reviewdata
ON abstracts.id=reviewdata.abstractid
AND reviewerid='$userid'
WHERE session='$session'
答案 1 :(得分: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'
另一个建议 - 在查询
中指定字段时使用别名