MySql将View Table加入为布尔值

时间:2010-07-02 13:09:00

标签: sql mysql join performance

我有一个用户表和一个列出一些用户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

非常感谢任何帮助。效率是一个巨大的优势。谢谢!

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:3)

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 ...;

答案 2 :(得分:1)

我会做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

答案 3 :(得分:0)

我知道这是一个“老”的问题,但刚发生在这个问题上,这些答案似乎都不是那么好。所以我以为我会投入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

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