1

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) 

しかし、これにより、この特定の査読者ではなく、他の査読者によって査読された抄録がまったく表示されなくなります。

私の問題は、当時何が許可されていたのかわからないことです...

4

2 に答える 2

1

古いインストールがなければこれを試すことはできませんが、ON 句に reviewerid のチェックを入れてみてください。

SELECT * 
FROM abstracts 
LEFT OUTER JOIN reviewdata  
ON abstracts.id=reviewdata.abstractid  
AND reviewerid='$userid'
WHERE session='$session'
于 2012-10-16T08:49:31.013 に答える
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'

別のアドバイス-クエリでフィールドを指定するときにエイリアスを使用する

于 2012-10-16T08:50:34.463 に答える