我想从我的表中获取一个随机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
答案 0 :(得分:2)
如果要检查某个值是否不存在,请使用NOT EXISTS
。
AND NOT EXISTS (SELECT ... )
答案 1 :(得分:1)
您的条件NULL IN (...)
将从不返回任何内容,因为与NULL
的比较始终返回NULL
,并且在查询条件中被视为“false”