私のアプリケーションでは、ユーザーは一致することができますが、一致が終了してから一定間隔で複数の一致が得られないようにします。NOT INとNULLを使用したクエリの処理
私は、マッチとunixタイムスタンプを付けて(zadd)保存します。ただサブクエリだ
SELECT user_id FROM users WHERE user_id NOT IN %s
、そこにどこで多くの他の多くの条件がありますが、Redisのは空のリストを返すときに問題がある:私のPostgresのクエリで
私が行うことができるようにしたいと思いますので、その間にユーザーがアクティブでないため、IN()はエラーを返しません。
これを処理するにはどうすればよいですか?ケースといつ使用しますか?また、私は、デフォルトでは、リストのRedisの戻りで偽の負のuser_idを置くことを考えていたが、私はそのようにずっとこれは
編集ハックしません: 私のクエリのサンプルを示します。
UPDATE users SET status = %s WHERE user_id IN (SELECT user_id FROM users WHERE user_id NOT IN % LIMIT 1)
クエリは正常に機能しましたが、今日はサブクエリの中に部分user_id NOT in %s
を追加しました。私はredisが返すタプルを渡します(または、より良いredisがリストを返し、それをタプルで変換します)。それは[1234、3456、678]のような整数だけを含んでいます。タプルが(内部の少なくとも1つの元素)空でないときには正常に動作しますが、タプルが空の場合、私はこのエラーを取得:
psycopg2.ProgrammingError: ERROR: syntax error at or near ")"
LINE 1: ...ocked = 0 AND bot_lang = 'en' AND user_id NOT IN() ORDER BY...
いるので確かに私は、デフォルトでは、タプル内の偽のuser_idをこの追加を解決しました空ではありませんが、私はこのハッキングが気に入らず、もっと素敵な解決策を見つけたいと思います。
質問を編集し、サンプルデータと希望する結果を提供して、エラーの内容を示します。あなたは '%s'として何を渡していますか?エラーは何ですか? 'NULL'sはどこに関係していますか? –