【问题标题】:How to return '1' if data exists and '0' if there is no data with mysql CASE如果数据存在,如何返回\'1\',如果没有数据,mysql CASE如何返回\'0\'
【发布时间】:2022-09-27 13:41:33
【问题描述】:

我有一个购买表,user_id 是一个外键。

如果购买表中有user_id,则返回1, 如果没有,我想返回 0。

我尝试使用 case 语句,但它返回以下结果。

{
     \"data\": []
}

下面是查询。还有其他方法吗?我需要帮助。 dao.js

const getUserPurchase = async(userId) => {
   const purchase = await myDataSource.query(
     `SELECT
       u.id,
       CASE
       WHEN p.user_id is null
       THEN \'0\'
       ELSE \'1\'
       END AS userPurchase
     FROM purchase p
     JOIN users u ON p.user_id = u.id
     WHERE u.id = ?`,
     [userId],
   );
   return purchase;
};

    标签: mysql node.js


    【解决方案1】:

    我会这样写:

    SELECT
       u.id,
       COUNT(*) > 0 AS userPurchase
    FROM users u
    LEFT OUTER JOIN purchase p ON p.user_id = u.id
    WHERE u.id = ?
    GROUP BY u.id
    

    【讨论】:

      【解决方案2】:

      您想选择所有用户,对于那些购买过东西的用户,即表 purchase 中存在相应的记录,您希望获得 1,其他所有用户获得 0。

      SELECT u.id,
             CASE 
               WHEN EXISTS (SELECT 1 FROM purchase p WHERE p.user_id = u.id) THEN 1 ELSE 0
             END AS userPurchase
        FROM users u
       WHERE u.id = ?
      

      【讨论】:

        【解决方案3】:

        它是这样写的……我使用的是表名“book”和“bookshelf” 当在“书架”表中不可用时,状态为 0

        SELECT bookshelf.`id_bookshelf`,bookshelf.name_bookshelf,book.id_book,
        (CASE WHEN book.id_book IS NULL THEN 0 ELSE 1 END) as status
        FROM `bookshelf` 
        LEFT JOIN book ON bookshelf.id_bookshelf = book.id_bookshelf
        GROUP BY bookshelf.id_bookshelf
        

        【讨论】:

          猜你喜欢
          • 2012-10-27
          • 2015-01-18
          • 1970-01-01
          • 2013-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          相关资源
          最近更新 更多