我试图从几个表中提取数据,其中一个表具有一对多的关系。我的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。
答案 0 :(得分:3)
您需要在外部查询中检查LEFT JOIN
:
SELECT
您获得了OUTER APPLY
个值,因为LEFT JOIN
没有匹配项。没有匹配意味着没有对任何数据执行exports.get_refresh_token = function(authorization_code)
{
var Buffer = require('buffer').Buffer;
var buf = new Buffer(PAYPAL_CLIENT_ID + ':' + PAYPAL_SECRET, 'utf8');
var basicAuthString = "Basic " + buf.toString('base64');
return Parse.Cloud.httpRequest({
method:"POST",
url: API_SERVER + "/v1/oauth2/token",
headers: {
"Authorization":basicAuthString,
"Content-Type": "application/x-www-form-urlencoded",
"Accept-Language": "en_US"
},
body: 'grant_type=authorization_code&response_type=token&redirect_uri=urn:ietf:wg:oauth:2.0:oob&code=' + authorization_code
}).then(function(httpResponse) {
var res = JSON.parse(httpResponse.text);
console.log('response: ' + httpResponse + ' res: ' + res + ' at ' + res.access_token + ' rt ' + res.refresh_token);
return Parse.Promise.as(res);
},
function(httpResponse) {
console.error("Request failed " + httpResponse.text + ' : ' + authorization_code + ' ' + API_SERVER);
return Parse.Promise.error('Unable to get refresh token');
});
}
。
我还要注意,如果您偏好图片的优先级,那么var length = 4; // example values
var depth = 8; // example values
var toal = compute(length, depth);
比total
更容易。但是,这将是另一个问题。
答案 1 :(得分:2)
而不是case语句,尝试'isnull'函数...
isnull(MAX([tmpUserPhotos].uFileName),'dflt.jpg') as UserImg
答案 2 :(得分:1)
查看<with variable="activePartId">
<equals value="org.eclipse.ui.navigator.ProjectExplorer"/>
</with>
运算符和TOP
的使用情况。
subquery
答案 3 :(得分:1)
即使您已对其进行检查,CASE
表达式返回空值的原因是表达式WHEN MAX([tmpUserPhotos].uFileName) = NULL
永远不会评估为真,即使MAX([tmpUserPhotos].uFileName)
1}} 是 null。
这是因为空值是SQL中一种特殊类型的值,其中一个意味着&#34;值未知&#34; - 几乎所有与null值的比较都计算为null,而不是true或false。
因此,您需要使用coalesce
或isnull
等函数来检查表达式是否为null;或者,您可以修改您的案例条件以测试表达式is null
,如此:
CASE WHEN MAX([tmpUserPhotos].uFileName) IS NULL
THEN 'dflt.jpg'
ELSE Max([tmpUserPhotos].uFileName)
END as UserImg