ホームページ  >  記事  >  データベース  >  Node.js で Sequelize を使用して結合クエリを実行するにはどうすればよいですか?

Node.js で Sequelize を使用して結合クエリを実行するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-21 18:29:10633ブラウズ

How to Perform Join Queries with Sequelize on Node.js?

Node.js で Sequelize を使用してクエリを結合する

問題:
Sequelize ORM を使用する場合、どのようにするか結合クエリを実行して関連テーブルからデータを取得できますか?特に、投稿とそれに関連付けられたユーザー情報を取得するにはどうすればよいですか?

解決策:

1.内部結合:

内部結合を実行するには、モデルのクエリ時に include オプションを指定します。このオプションを使用すると、結合する関連モデルを指定できます。デフォルトでは、Sequelize は左外部結合を実行するため、内部結合の必須オプションを true に設定する必要があります。

たとえば、すべての投稿とそれに関連付けられたユーザー情報を取得するには、次のクエリを使用できます。 :

Posts.findAll({
  include: [{
    model: User,
    required: true
  }]
}).then(posts => {
  // Process and return the posts along with the user information.
});

2.左外部結合:

左外部結合を実行するには、必要なオプションを省略するか、include オプションで false に設定します。これにより、ユーザーが関連付けられていない投稿を含むすべての投稿を取得できるようになります。

例:

Posts.findAll({
  include: [{
    model: User,
    required: false
  }]
}).then(posts => {
  // Process and return the posts, including those without user information.
});

3.結合結果のフィルタリング:

インクルード オブジェクトの where オプションを使用して、関連レコードをフィルタリングできます。たとえば、1984 年生まれのユーザーに属する投稿のみを取得するには、

Posts.findAll({
  include: [{
    model: User,
    where: {
      year_birth: 1984
    }
  }]
}).then(posts => {
  // Process and return the posts belonging to users born in 1984.
});

4 を使用します。複雑な結合条件:

where オプションを使用して複雑な結合条件を指定することもできます。たとえば、投稿が作成された年と同じ年に生まれたユーザーに属する「Sunshine」という名前の投稿を取得するには、次を使用します:

Posts.findAll({
  where: {
    name: "Sunshine"
  },
  include: [{
    model: User,
    where: ["year_birth = post_year"]
  }]
}).then(posts => {
  // Process and return the posts matching the specified conditions.
});

ドキュメント参照:

  • [モデル:使用法](http://docs.sequelizejs.com/en/latest/docs/models-usage/#eager-loading)

以上がNode.js で Sequelize を使用して結合クエリを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。