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

...但我没有得到任何结果(这一定是我的查询中有错误,因为有很多行满足所需的条件。)我应该如何解决它?

- 解决了 -

解决方案是使用 NOT EXISTS 而不是 NULL IN,并使用表别名将第一个 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

2

如果要检查值是否不存在,请使用NOT EXISTS.

AND NOT EXISTS (SELECT ... )
于 2012-11-05T12:13:48.550 回答
1

您的条件NULL IN (...)永远不会返回任何内容,因为与NULL总是返回的比较NULL在查询条件中被视为“假”。

于 2012-11-05T12:24:17.983 回答