简体   繁体   English

如何使用UNION选择包括NULL在内的所有字段?

[英]How to select using UNION all fields including NULL?

I use a query: 我使用查询:

SELECT idFavourite AS entity, 'favourite' AS type 
FROM favourite 
WHERE idCar = 1 AND idUser = 1 
UNION
SELECT idLike AS entity, 'likes' AS type 
FROM `likes` 
WHERE idCar = 1 AND idUserLiked = 2

If second condition is not right, this query returns only one type . 如果第二个条件不正确,则此查询仅返回一种type How I can get always two type of both queries? 我怎样才能得到总有两个type都疑问?

New query: 新查询:

SELECT likes.idLike AS likes, favourite.idFavourite AS fav FROM favourite

LEFT JOIN `likes` ON (likes.idCar = favourite.idCar) AND (likes.idUserLiked = favourite.idUser) AND
likes.idCar = 1 AND likes.idUserLiked = 2

First, use union all unless you want to incur the overhead of removing duplicates (which is not possible in this case). 首先,使用union all除非您要承担删除重复项的开销(在这种情况下是不可能的)。 You can do: 你可以做:

SELECT idFavourite AS entity, 'favourite' AS type
FROM favourite 
WHERE idCar =1 AND idUser = 1
UNION ALL
SELECT idLike AS entity, 'likes' AS type
FROM `likes` 
WHERE idCar = 1 AND idUserLiked = 2
UNION ALL
SELECT NULL, 'likes'
FROM (SELECT 1 as x) t
WHERE NOT EXISTS (SELECT 1 FROM likes WHERE idCar = 1 AND idUserLiked = 2);

Alternatively, if you only expect at most one row from the second subquery, then use aggregation: 另外,如果您只希望第二个子查询中最多包含一行,则使用聚合:

SELECT idFavourite AS entity, 'favourite' AS type
FROM favourite 
WHERE idCar =1 AND idUser = 1
UNION ALL
SELECT MAX(idLike) AS entity, 'likes' AS type
FROM `likes` 
WHERE idCar = 1 AND idUserLiked = 2;

An aggregation query with no GROUP BY always returns one row. 没有GROUP BY的聚合查询始终返回一行。 In this case, entity will be NULL if the WHERE clause filters out everything. 在这种情况下,如果WHERE子句过滤掉所有内容,则entity将为NULL

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM