【问题标题】:MySql Join a View Table as a BooleanMySql 作为布尔值加入视图表
【发布时间】:2010-07-02 13:08:59
【问题描述】:

我有一个用户表和一个列出一些用户 ID 的视图表...它们看起来像这样:

用户:

User_ID  |   Name       |   Age   | ...
   555      John Doe        35
   556      Jane Doe        24
   557      John Smith      18

View_Table

User_ID
  555
  557

现在,当我运行查询来检索用户时:

SELECT User_ID,Name,Age FROM Users WHERE User_ID = 555

SELECT User_ID,Name,Age FROM Users WHERE User_ID = 556

我还想选择一个布尔值,说明我正在检索的用户是否存在于 View_Table 中。

结果:

   User_ID           Name          Age      In_View
    555             John Doe       35         1
    556             Jane Doe       24         0

任何帮助将不胜感激。效率是一个巨大的优势。谢谢!!

【问题讨论】:

    标签: sql mysql join performance


    【解决方案1】:
    SELECT Users.User_ID,Name,Age, View_Table.User_ID IS NOT NULL AS In_View
    FROM Users 
    LEFT JOIN View_table USING (User_ID)
    WHERE User_ID = 555
    

    【讨论】:

    • 这需要更多的上船
    【解决方案2】:
    SELECT 
       User_ID, Name, Age, 
       CASE WHEN v.UserID is not null THEN 1 ELSE 0 END AS In_View
    FROM Users u
    LEFT JOIN View_Table v on u.User_ID = v.UserID
    WHERE UserID ...;
    

    【讨论】:

      【解决方案3】:

      我会做一个LEFT JOIN。只要你有User_ID 的键/索引,它应该是非常有效的。

      SELECT User_ID,Name,Age, IF(View_Table.User_ID, 1, 0) AS In_View
      FROM Users LEFT JOIN View_Table USING(User_ID)
      WHERE User_ID = 555
      

      【讨论】:

        【解决方案4】:

        我知道这是一个“旧”问题,但只是发生在这个问题上,这些答案似乎都不是那么好。所以我想我会投入我的 2 美分

        SELECT
            u.User_ID,
            u.Name,
            u.Age,
            COALESCE((SELECT 1 FROM View_Table AS v WHERE v.User_ID = u.User_ID ), 0) AS In_View
        FROM
            Users AS u
        WHERE
            u.User_ID = 555
        

        只需使用相关查询(或 null )选择1,然后获取0,我们可以使用方便的函数COALESCE,它从左到右返回第一个非空值。

        【讨论】:

          猜你喜欢
          • 2015-04-07
          • 1970-01-01
          • 1970-01-01
          • 2021-12-29
          • 2022-01-18
          • 1970-01-01
          • 2020-10-06
          • 1970-01-01
          • 2017-08-04
          相关资源
          最近更新 更多