我有一个用户表和一个列出一些用户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
非常感谢任何帮助。效率是一个巨大的优势。谢谢!
答案 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
。