where 句を使用して空のフィールドをフィルタリングする SQL 左結合
P粉511985082
2023-08-13 19:06:52
<p>テーブルが 2 つあり、1 つは Users テーブル、もう 1 つは Token テーブルです。これら 2 つのテーブルを結合して、どのユーザーがトークンを検証したか、どのユーザーが検証していないのかを確認したいと思います。トークン テーブルには、ユーザー ID を含む外部キーがあります。 </p>
<p>今度は左結合を使用してユーザー ID を結合し、検証が行われないかどうかを確認しようとしています。クエリ ステートメントは次のとおりです。 </p>
<pre class="brush:php;toolbar:false;">SELECT 名、確認済み
FROM ユーザーの LEFT JOIN トークン
ON users.ID = tokens.UID
WHERE 検証済み = false</pre>
<p>次の 2 つのテーブルがあるとします。</p>
<pre class="brush:php;toolbar:false;">ID | 名前
0 | ジョー
1 | サリー
2 | デイブ
3 | ジョン</pre>
<p>すると、トークンテーブルは次のようになります。 </p>
<pre class="brush:php;toolbar:false;">ID | UID | 検証済み
0 | 1 | 0
1 | 2 | 0
2 | 3 | 1
<p>ご覧のとおり、Joe の 2 番目のテーブルにはレコードがありません。これら 2 つのテーブルを結合したいのですが、ジョーの 2 番目のテーブルにレコードがない場合でも、それを false/null として処理したいと考えています。認証されていないユーザーを検索するためにクエリを実行すると、データの 2 エントリのみが返されます。 </p>
<pre class="brush:php;toolbar:false;">名前 | 確認済み
サリー | 0
デイブ | 0</pre>
<p>where 句を削除すると、結果は次のようになります。 </p>
<pre class="brush:php;toolbar:false;">名前 | 確認済み
サリー | 0
デイブ | 0
ジョン | 1
ジョー | NULL</pre>
<p>ご覧のとおり、Joe の下部には null 値がありますが、これを未検証として扱いたいと考えています。次のデータを取得するにはクエリをどのように記述すればよいですか: </p>
<pre class="brush:php;toolbar:false;">名前 | 確認済み
サリー | 0
デイブ | 0
ジョー | NULL</pre>
<p>または次のクエリ ステートメントの場合、結果は 3 になります。現在のクエリ結果は 2 です。 </p>
<pre class="brush:php;toolbar:false;">SELECT カウント(*)
FROM ユーザーの LEFT JOIN トークン
ON users.ID = tokens.UID
WHERE 検証済み = false</pre>
<p><br /></p>
リーリー