簡體   English   中英

重寫帶有子查詢的MySQL查詢,用於版本3.23.58

[英]Rewriting MySQL query with subquery for version 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'

換句話說,如果審閱者已經審閱過,我想要一個包含所有摘要以及摘要的審閱數據的列表。 否則,我仍然想要摘要,但摘要數據為空(以便他可以更改)。

上面的查詢在較新的版本中運行良好,但在此舊版本中,我不允許使用子查詢,因此當我在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'

從我的角度來看,重構查詢應該顯示所有審閱者的摘要,包括特定審閱者的摘要。 以下情況

 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'

另一個建議-在查詢中指定字段時使用別名

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM