2

SQLクエリの簡単なロジックの質問があります。

一部の記事の履歴テーブルがあり、記事にはstatus_idの行があります。記事はあらゆる種類のステータスを持つことができ、特定のステータスを持たなかったこれらの記事を取得したいだけです。例えば:

articlename | status_id
article1    |  2
article1    |  1
article1    |  3
article2    |  2
article2    |  3
article3    |  2
article3    |  3


SELECT * FROM article WHERE article.status_id != 2 GROUP BY article.id

これは、このステートメントに適合する2つの行があるため、「article1」を取得する間違ったコードです。解決策は簡単だと思いますが、現時点ではわかりません-.-

前もって感謝します

4

1 に答える 1

2

NOT INを使用して、ステータスが「2」のすべての記事を削除する必要があります。

/* NOT IN BASED APPROACH */
SELECT * 
FROM article 
WHERE article.id NOT IN (
    SELECT article.id 
    FROM article
    WHERE article.status_id = 2)

/* NOT EXISTS BASED APPROACH */
SELECT * 
FROM article 
WHERE article.id NOT EXISTS (
    SELECT *
    FROM article
    WHERE article.status_id = 2)

/* JOIN BASED APPROACH */
SELECT *
FROM   article a1 LEFT JOIN
       article a2 
       ON a1.id = a2.id 
       AND a2.status_id = 2
WHERE  a2.id IS NULL
于 2012-08-08T13:34:58.463 に答える