gpt4 book ai didi

sql - JOIN 的问题

转载 作者:行者123 更新时间:2023-12-04 15:57:10 31 4
gpt4 key购买 nike

我正在尝试从多个表中提取数据,其中一个表具有一对多关系。我的 SQL 看起来像这样:

SELECT 
VU.*,
UI.UserImg,
COALESCE(CI.Interests, 0) as NumInterests
FROM [vw_tmpUsers] VU
LEFT JOIN (
SELECT
[tmpUserPhotos].UserID,
CASE WHEN MAX([tmpUserPhotos].uFileName) = NULL
THEN 'dflt.jpg'
ELSE Max([tmpUserPhotos].uFileName)
END as UserImg
FROM [tmpUserPhotos]
GROUP BY UserID) UI
ON VU.UserID = UI.UserID

我排除了后面的一堆 LEFT JOINS,因为它们都正常工作。

我的问题是,我只想从具有一对多关系的表中提取一个 图像名称。为此,我使用了 MAX 函数。

我想要的结果是这样的:

UserID  UserName    UserState   UserZip UserIncome  UserHeight  UserImg
1 Jimbo NY 10012 2 64 1[Blue hills.jpg
2 Jack MA 06902 3 66 dflt.jpg
3 Lisa CT 06820 4 64 dflt.jpg
4 Mary CT 06791 6 67 4[Natalie.jpg
5 Wanda CT 06791 6 67 dflt.jpg

但它看起来像这样:

UserID  UserName    UserState   UserZip UserIncome  UserHeight  UserImg
1 Jimbo NY 10012 2 64 1[Blue hills.jpg
2 Jack MA 06902 3 66 NULL
3 Lisa CT 06820 4 64 NULL
4 Mary CT 06791 6 67 4[Natalie.jpg
5 Wanda CT 06791 6 67 NULL

我的 CASE 语句中一定有一些奇怪的东西,但我对它们不是很好。我试过使用 IS NULL、= NULL、='NULL',但都无济于事。

任何人都可以发现我做错了什么吗?一个可能会有所启发的小道消息;如果 tmpUserPhotos 中没有匹配的记录,MAX(tmpUserPhotos.uFileName) 只会返回 NULL。

最佳答案

您需要在外部查询中检查 NULL:

SELECT VU.*, 
COALESCE(UI.UserImg, 'dflt.jpg') as UserImg,
COALESCE(CI.Interests, 0) as NumInterests
FROM [vw_tmpUsers] VU LEFT JOIN
(SELECT [tmpUserPhotos].UserID, MAX([tmpUserPhotos].uFileName) as UserImg
FROM [tmpUserPhotos]
GROUP BY UserID
) UI
ON VU.UserID = UI.UserID ;

您将获得 NULL 值,因为 LEFT JOIN 没有匹配项。没有匹配意味着 SELECT 没有在任何数据上执行。

我还会注意到,如果您对图像的优先级有偏好,那么 OUTER APPLYLEFT JOIN 更容易。但是,那将是另一个问题。

关于sql - JOIN 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34924963/

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