3

ID 番号に基づくリレーショナルな 2 つの MySQL テーブルがあります。2 番目のテーブルの ID と一致しない最初のテーブルの ID の数を選択する必要があります。これは私が試したものです:

SELECT COUNT(DISTINCT(ask_questions.id)) 
FROM ask_questions 
INNER JOIN ask_answers ON ask_questions.id != ask_answers.question_id;

「!=」を使用すると一致しない結果が返されると思いましたが、返される数値は正しくありません。より良い解決策はありますか?

4

5 に答える 5

4

他のテーブルに少なくとも一致がないことLEFT JOINを取得したいので使用します。ID

SELECT  COUNT(DISTINCT(ask_questions.id)) 
FROM    ask_questions 
        LEFT JOIN ask_answers 
            ON ask_questions.id = ask_answers.question_id
WHERE   ask_answers.question_id IS NULL

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

の代替手段JOINは、NOT EXISTS

SELECT  COUNT(DISTINCT(id)) 
FROM    ask_questions 
WHERE   NOT EXISTS
        (
            SELECT  null
            FROM    ask_answers
            WHERE   ask_questions.id = ask_answers.question_id
        )
于 2013-06-03T01:20:22.453 に答える
1

使用するNOT IN

SELECT COUNT(ask_questions.id)
FROM ask_questions
WHERE ask_questions.id NOT IN(SELECT question_id FROM ask_answers)
于 2013-06-03T01:22:26.427 に答える
0
SELECT COUNT(DISTINCT(ask_questions.id)) 
FROM ask_questions 
LEFT JOIN ask_answers ON ask_questions.id = ask_answers.question_id;
WHERE ask_answers.question_id IS NULL

左の結合により、ask_questionsがなくてもを取得できますask_answers

持っていないものにask_answersはIDがありますnull

于 2013-06-03T01:20:14.700 に答える
0

以下を除いて使用:

select count(*) from 
    (select id from questions 
     except 
     select id from ask_answers_questions) as subtable;

EXCEPT は重複を削除します。

--dmg

于 2013-06-03T01:20:55.813 に答える
0

テーブルを内部結合ではなく外部結合し、2 番目のテーブルで null の列を選択します。

SELECT COUNT(DISTINCT(ask_questions.id))
FROM ask_questions
    LEFT JOIN ask_answers ON ask_questions.id = ask_answers.question_id
WHERE ISNULL(ask_answers.id)
于 2013-06-03T01:21:03.593 に答える