ブログに属する投稿を取得する次のクエリがあります
SELECT p.*
FROM `Posts` p
INNER JOIN Blogs b ON b.id = p.blog_id
「ON」の反対を行うMySQL関数はありますか? 「ブログ」データベース テーブルのブログに属していない投稿を照会したい場合 たとえば、ブログが削除された場合。
LEFT JOIN - NULL
次のように、いずれかのコンボを使用する必要があります。
SELECT p.*
FROM Posts p
LEFT OUTER JOIN Blogs b
ON b.id = p.blog_id
WHERE b.id IS NULL
... またはNOT IN
依存クエリ (いわゆる「アンチ結合」を使用):
SELECT *
FROM Posts
WHERE blog_id NOT IN (SELECT id FROM Blogs)
私はほとんど最初の形式のみを使用していることを認めますが、実際には同様のパフォーマンスがあります。少なくとも、これらのクエリの類似点と相違点の詳細な説明が記載されたこの記事をざっと目を通しておくことをお勧めします。それは非常に啓発的な読書です。)
それはすべてJOINについてです。
SELECT p.*
FROM `Posts` p
LEFT OUTER JOIN Blogs b ON b.id = p.blog_id
WHERE b.Id IS NULL
あなたのためにトリックを行う必要があります。
Jeff Atwood が結合の優れた概要を説明しています
この例では、LEFT OUTER JOIN が行うことは、ブログのすべての行と、同じ blog_id-Id の組み合わせを持つ投稿のすべての行と、およびブログに一致する ID を持たない投稿のすべての行と一致することです。この例では、これらの行はブログのエントリに対して NULL です (ブログがないため)。b.Id IS NULL
これを達成する方法は他にもいくつかあります。例えば:
SELECT * FROM Posts WHERE blog_id NOT IN (SELECT Id FROM Blogs)
事実上、これは blog テーブルにない blog_id を持つ投稿のすべての行をクエリします。