SELECT将值引用到子查询

时间:2012-11-05 12:12:03

标签: sql subquery

我想从我的表中获取一个随机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

2 个答案:

答案 0 :(得分:2)

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

AND NOT EXISTS (SELECT ... )

答案 1 :(得分:1)

您的条件NULL IN (...)从不返回任何内容,因为与NULL的比较始终返回NULL,并且在查询条件中被视为“false”