テーブルからランダムな ID 値を取得しようとしています。条件は、選択した値が同じ ID で異なる言語 (言語はlang
フィールド)に対して存在してはならないということです。
私はこれをします:
SELECT id_v as p,cont FROM value_phrase WHERE lang=1 AND
NULL IN (SELECT cont FROM value_phrase WHERE id_v=p AND lang=2)
ORDER BY RAND() LIMIT 0,1
...しかし、結果が得られません (目的の条件を満たす行が多数あるため、クエリのエラーに違いありません)。どうすれば修正できますか?
-- 解決済み --
解決策は、NULL IN の代わりに NOT EXISTS を使用し、テーブル エイリアスを使用して最初の id_v をサブクエリで参照することです。このように (Mark Byers に感謝):
SELECT first.id_v, first.cont
FROM value_phrase AS
FIRST WHERE lang =1
AND NOT
EXISTS (
SELECT cont
FROM value_phrase
WHERE id_v = first.id_v
AND lang =2
)
ORDER BY RAND( )
LIMIT 0 , 1