[英]how to handle If a subquery (inner query) returns a null value to the outer query
I have a vertical table like this:我有一个这样的垂直表:
id ![]() |
Profile_id ![]() |
feature_id![]() |
value![]() |
---|---|---|---|
1 ![]() |
1 ![]() |
1 ![]() |
Rick![]() |
2 ![]() |
1 ![]() |
2 ![]() |
Novak![]() |
3 ![]() |
5 ![]() |
3 ![]() |
5428 ![]() |
4 ![]() |
5 ![]() |
1 ![]() |
Joe![]() |
... ![]() |
... ![]() |
... ![]() |
... ![]() |
(above table is short part of profile_features table) (上表是 profile_features 表的一小部分)
I have a query:我有一个查询:
SELECT * FROM(SELECT `value` TelNum FROM `profile_features` WHERE `feature_id` IN (10, 64, 103) AND `profile_id` = 16752 LIMIT 1) as TelNum,
(SELECT `value` NCode From `profile_features` WHERE `feature_id` IN (5, 61, 100) AND `profile_id` = 16752 LIMIT 1) AS NCode,
(SELECT `value` Fname From `profile_features` WHERE `feature_id` IN (1, 55, 86) AND `profile_id` = 16752 LIMIT 1) AS Fname,
(SELECT `value` Lname From `profile_features` WHERE `feature_id` IN (2, 56, 95) AND `profile_id` = 16752 LIMIT 1) AS Lname
but if one of the subqueries returns null, query have not any output.但如果其中一个子查询返回 null,则查询没有任何输出。
I want a row result with TelNum, NCode, Fname, Lname either they are Null or not null.我想要一个带有 TelNum、NCode、Fname、Lname 的行结果,它们是 Null 还是非 null。
You could use scalar subqueries in the select-list instead of your current Cartesian product:您可以在选择列表中使用标量子查询,而不是当前的笛卡尔积:
SELECT (SELECT `value` FROM `profile_features` WHERE `feature_id` IN (10, 64, 103) AND `profile_id` = 16752 LIMIT 1) as TelNum,
(SELECT `value` From `profile_features` WHERE `feature_id` IN (5, 61, 100) AND `profile_id` = 16752 LIMIT 1) AS NCode,
(SELECT `value` From `profile_features` WHERE `feature_id` IN (1, 55, 86) AND `profile_id` = 16752 LIMIT 1) AS Fname,
(SELECT `value` From `profile_features` WHERE `feature_id` IN (2, 56, 95) AND `profile_id` = 16752 LIMIT 1) AS Lname;
Alternatively, you could learn to use LEFT OUTER JOIN:或者,您可以学习使用 LEFT OUTER JOIN:
SELECT TelNum.TelNum, NCode.NCode, Fname.Fname, Lname.Lname
FROM (SELECT NULL AS dummy) AS dummy
LEFT OUTER JOIN (SELECT `value` TelNum FROM `profile_features` WHERE `feature_id` IN (10, 64, 103) AND `profile_id` = 16752 LIMIT 1) AS TelNum ON true
LEFT OUTER JOIN (SELECT `value` NCode From `profile_features` WHERE `feature_id` IN (5, 61, 100) AND `profile_id` = 16752 LIMIT 1) AS NCode ON true
LEFT OUTER JOIN (SELECT `value` Fname From `profile_features` WHERE `feature_id` IN (1, 55, 86) AND `profile_id` = 16752 LIMIT 1) AS Fname ON true
LEFT OUTER JOIN (SELECT `value` Lname From `profile_features` WHERE `feature_id` IN (2, 56, 95) AND `profile_id` = 16752 LIMIT 1) AS Lname ON true;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.