gpt4 book ai didi

mysql - MySQL CASE 语句是否有优先级?

转载 作者:行者123 更新时间:2023-11-29 08:10:39 26 4
gpt4 key购买 nike

我正在努力处理一个存在一些空值的查询,并且在我的 CASE 语句中,未处理对 NULL 值的测试。我尝试过以不同的方式排序测试,但似乎没有什么区别。

SELECT Title, library.LibraryID, Registered
FROM libraries
LEFT JOIN
(SELECT LibraryID,UserID,
(CASE
>>> WHEN UserID IS NULL THEN "False" <<<<<<<< PROBLEM
WHEN UserID=1 THEN "YES! Registered"
ELSE "Not Registered"
END) AS Registered
FROM librariesandmembers WHERE UserID=1) AS myAlias
ON libraries.LibraryID = myAlias.LibraryID');

然后我尝试了

WHEN USerID<>1 THEN "False"

但这并没有改变任何事情。

这是一个 PHP/MySQL 应用程序。 phpmyAdmin 中的结果显示,我的查询结果在我希望出现“False”的地方产生了 NULL。

我错过了什么?一定是显而易见的事情,但我就是看不到。

[编辑] 让我尝试以这种方式解释目标:我想要一个所有(例如 5 个)库的列表,其旁边的结果表明用户是“是!已注册”或“未注册”。 Librarysandmembers 表中可能有也可能没有相应的条目。因此出现了 NULL 问题。

最佳答案

这是您的查询:

SELECT Title, l.LibraryID, Registered
FROM libraries lLEFT JOIN
(SELECT LibraryID, UserID,
(CASE WHEN UserID IS NULL THEN "False" <<<<<<<< PROBLEM
WHEN UserID=1 THEN "YES! Registered"
ELSE "Not Registered"
END) AS Registered
FROM librariesandmembers
WHERE UserID = 1
) AS myAlias
ON l.LibraryID = myAlias.LibraryID;

在子查询中,userId 的值始终为 1,因此 case 语句仅显示'YES!已注册'。您想将其移至外层。要获得相同的效果,条件 UserId=1 必须移至 on 子句:

SELECT Title, l.LibraryID, Registered,
(CASE WHEN myalias.UserID IS NULL THEN 'False'
WHEN myalias.UserID = 1 THEN 'YES! Registered'
ELSE 'Not Registered'
END) AS Registered
FROM libraries l LEFT JOIN
librariesandmembers myalias
ON l.LibraryID = myAlias.LibraryID and
myalias.UserID = 1;

关于mysql - MySQL CASE 语句是否有优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21691464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com