以下のクエリは適切に実行されており、その機能に対して非常に高速に実行されます。ただし、以下に概説するように、非常に奇妙な動作が表示されます。
ただし、PHP では、動作する ID を独自に決定しているようです。私はコードが正しいと確信しています。PHP で PDO を使用し、必要に応じて変数をバインドしています。
たとえば、author_id 600 を渡すと機能しますが、author_id 2 を渡すと機能せず、レコードが返されません。しかし、クエリをエコーして MySQL に貼り付けて実行すると、両方の ID で機能します。PDO が一部の ID で変数をバインドできていないようです。id 変数をエコーしましたが、実際には適切な id が含まれています。
他の誰かがこの動作を経験しましたか? とても珍しいと思います。
SELECT
GROUP_CONCAT(a.author_id) AS author_ids
FROM
references_final AS rf
INNER JOIN (reference_authors AS ra INNER JOIN authors_final AS a ON (ra.author_id = a.author_id))
ON (rf.reference_id = ra.reference_id)
GROUP BY rf.reference_id HAVING :author_id IN (author_ids)