0

テーブルからランダムな 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
4

2 に答える 2

1

との比較は常に返され、クエリ条件では「false」として扱われるため、条件NULL IN (...)は何も返しません。NULLNULL

于 2012-11-05T12:24:17.983 に答える