2011-07-03 8 views
0

MySQLテーブルがあります。articles_dataをクエリしようとしています。他のテーブルへの結合をしたくありません。JOINなしのMySQLステートメント

article_id doc_type doc_type_id 
1   1   2 
1   2   1 
2   1   2 
3   1   2 
3   2   1 

私はdoc_typeが1で、doc_type_idが2であり、それはdoc_typeは2とdoc_type_idがある同じarticle_idのための別の行を持ってどこどこ返すクエリを記述しようとしています:

それは行を持っています1のように上記の例で私はarticle_id 1と3を返そうとしています。

どのように私はこれを行うにはSQLクエリを書くだろうか?あなたが他のテーブルに参加する必要がありませんが、あなたは自分でそれを行うことができ

+2

あなたはおそらく、サブクエリを使用することができますが、最も簡単には、JOINを使用することです。あなたがJOINを避けたいと思う特別な理由はありますか? –

答えて

0
select distinct article_id 
from articles_data ad 
where 
    doc_type = 1 and 
    doc_type_id = 2 and 
    article_id in (
     select article_id 
     from articles_data 
     where 
      article_id = ad.article_id and 
      doc_type = 2 and 
      doc_type_id = 1 
    ) 
+0

これは3つのarticle_id値をすべて返しますか? –

+0

@テッドええ、私は間違った質問を読んでいます。ありがとう:)更新しました! – Karolis

+0

@karolis: 'article_id = ad.article_idと'を削除する必要があります。 –

1

これは私の頭の上からです

に参加するには、構文

を微調整する必要がある場合があります
select distinct article_id 
from articles_data a 
join articles_data b on b.articles_id = a.articles_id 
where a.doc_type = 1 and a.doc_type_id = 2 
and b.doc_type = 2 and b.doc_type_id = 1 
0
SELECT article_id 
FROM article_data 
WHERE (doc_type = 1 AND doc_type_id = 2) 
    OR (doc_type = 2 AND doc_type_id = 1) 
GROUP BY article_id 
HAVING COUNT(DISTINCT doc_type) = 2 AND COUNT (DISTINCT doc_type_id) = 2 
0
SELECT DISTINCT article_id 
FROM article_data ad 
WHERE doc_type = 1 
    AND doc_type_id = 2 
    AND EXISTS 
    (SELECT * 
     FROM article_data ad2 
     WHERE ad2.doc_type = 2 
     AND ad2.doc_type_id = 1 
     AND ad2.article_id = ad.article_id 
    )