6

リレーショナル データベースについて質問があります。これを使用する場合、外部キーを適切に設定する必要があることはわかっていますが、すぐに設定しなかったため、壊れた関係を持つエントリを削除するために、乱雑なデータベースをクリーンアップする必要があります。私のテーブルは次のようになります。

リンク
| ID | URL | その他、無関係な分野 |

LINK_USERS
| ID | リンク ID | その他、無関係な分野 |

LINK_USERS が link_id フィールド (LINKS テーブルのエントリの ID) を通じて LINKS と関係を持っていることは明らかです。

私はしばらくいじっていましたが、どういうわけか、LINKS で参照されていない LINK_USERS からすべての行を選択できないようです。

ここで、削除は LINKS テーブルでのみ行われるべきだったことを付け加える必要があります。したがって、クエリから必要なのは、すべての行を SELECT することです FROM LINK_USERS WHERE link_id が LINKS テーブルに見つかりません。

お察しのとおり、私は MySQL の第一人者ではありません。私の質問があいまいな場合はお知らせください。

前もって感謝します!

4

2 に答える 2

15

あなたの質問はまったく曖昧ではありません。非常に単純な SQL で必要なものを取得できます (これは、探しているものの英語の説明に非常によく似ています)。

 SELECT * FROM LINK_USERS WHERE link_id NOT IN (SELECT id FROM LINKS);
于 2012-10-02T18:23:20.147 に答える
12

LEFT JOIN バージョンは次のとおりです。

SELECT *
FROM LINK_USERS
LEFT JOIN LINKS ON LINK_USERS.link_id = LINKS.link_id
WHERE LINKS.link_id IS NULL

同じことを行いますが、大きなテーブルではより高速になる場合があります。YMMV。

于 2015-02-04T04:41:41.337 に答える