2011-07-03 93 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,它有另一行對同一article_id其中doc_type是2和doc_type_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

這將返回所有三個article_id值,不是嗎? –

+0

@Ted是的,我看錯了這個問題。謝謝:)更新! – 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 
    )