簡體   English   中英

Sequelize Select 列 WHERE 其他列沒有包含值

[英]Sequelize Select column WHERE other column has not contain value

我有以下Accounts_Users table

account_id | user_id
--------------------
1          | 60
2          | 60
1          | 50
3          | 50 

我想檢索所有沒有具有特定 account_id 行的 user_id 例如,如果 account_id = 2 我想要的結果應該是:

user_id
-------
50 

由於 user_id = 60 有 account = 2 的記錄。

我當前的查詢如下所示:

let existingUserIdsWithAccountUser = await AccountUserModel.findAll({
    raw: true,
    where: {
      account_id: account_id,
      user_id: {
        [Sequelize.Op.in]: existingUsersIds
      }
    },
          attributes: [Sequelize.fn('DISTINCT', Sequelize.col('user_id')), 'user_id']

  }).map(user => user.user_id);
  const existingUserIdsWithoutAccountUser = existingUsersIds.filter(user_id => !existingUserIdsWithAccountUser.includes(user_id));

我想做一個查詢而不必過濾結果。

我也厭倦了以下內容:

    let existingUserIdsWithoutAccountUser = await AccountUserModel.findAll({
          raw: true,
          where: {
            account_id: {
              [Sequelize.Op.not]: account_id
            },
            user_id: {
              [Sequelize.Op.in]: existingUsersIds
            }
          },
  attributes: [Sequelize.fn('DISTINCT', Sequelize.col('user_id')), 'user_id']
        }).map(user => user.user_id);
    

但在這種情況下,如果我有一個不同 account_id 的記錄,那么它仍然會明顯返回。

我終於能夠使用以下查詢來做到這一點:

const existingUserIdsWithoutAccountUser = await AccountUserModel.findAll({
      raw: true,
      where: {
        user_id: {
          [Sequelize.Op.and]: {
            [Sequelize.Op.notIn]: Sequelize.literal(`(SELECT user_id FROM \`Accounts_Users\` WHERE account_id = ${account_id})`),
            [Sequelize.Op.in]: existingUsersIds
          }
        }
      },
      attributes: [Sequelize.fn('DISTINCT', Sequelize.col('user_id')), 'user_id']
    }).map(user => user.user_id);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM