2017-05-27 19 views
0

サブクエリです:MySQLは、私はこのクエリのよりよい解決策を探し

SELECT * FROM USER 
    WHERE 
    1 IN (SELECT some_id...) OR 
    2 IN (SELECT some_id...) OR 
    3 IN (SELECT some_id...) 

サブクエリが1行以上に返すことができます。

私はそれを変更しようとしました:WHERE (1,2,3) IN (SELECT some_id...)が、そのスローエラー:

オペランドは、私のようないくつかのトリックしようとした1列(複数可)

が含まれている必要があります

(1,2,3) = ANY (SELECT some_id...)を - しかし、まだ同じ問題。

サブクエリの結果は、2番目のテーブルのsome_idsだけです。

複数のORを使用しないでこれを実現する方法はありますか?

ありがとうございました。

+0

クエリは 'SELECT some_id ...'他のテーブルを参照していますか?はいの場合は、共通の列に参加できますか? – Utsav

+0

はい(SELECT category_id FROM user_category WHERE user.id = user_category.user_id)があり、使用可能なcategory_idがすべて返されます。 – Filip

+0

クエリ全体の例を投稿できますか?あなたの問題に影響を与える可能性のある他の設計上の決定があるように感じます。 –

答えて

1

私はあなたが探していると思う:

select u.* 
from users u 
where exists (select 1 
       from usercategories uc 
       where uc.userid = u.userid and 
        uc.categoryid in (1, 2, 3) 
      ); 

あなたが本当にinを使用したい場合は、あなたができる:

select u.* 
from users u 
where u.userid in (select uc.userid 
        from usercategories uc 
        where uc.categorid in (1, 2, 3) 
       ); 
+0

はい。それは仕事です!ありがとうございました! – Filip

0

これはあなたがやろうとしていたことですか?

SELECT * USERあなただけの行が存在しているかどうかを確認したい場合は、あなたがEXISTSの中some_id(1、2、3)

+0

これは動作しますが、some_idの1つの値に対してのみサブクエリがより多くの行を返します。ANY OFの値が等しい場合、理想的には行を取得する必要があります。 ANY(1,2,3,4)のような(1,2,3)のように - 私はそれをよりよく記述するのは熱くない。 : -/ – Filip

+0

このクエリは、これらの3つの値のいずれかを持つ列some_idを持つ行を返します。別のものが必要な場合は、質問に例を挙げることができますか? – Juan

+0

@Filip。 。 。もう少し質問してください。これはあなたが尋ねた質問に答えるように見えます。 –

0

を使用することができます 、例えばFROM:

SELECT * FROM USER u 
WHERE EXISTS (
    SELECT 1 FROM your_table WHERE some_id IN (1,2,3) AND userid = u.id; 
); 
0

あなたはこれを試しましたか? (サブクエリなし)

select user.* from user 
join user_category on user.id = user_category.id_user 
where user_category.category_id in (1,2,3); 
関連する問題