2016-05-15 30 views
0

我使用的查詢:如何選擇使用UNION所有字段包括NULL?

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 

如果第二個條件是不正確的,這個查詢只返回一個type。我如何總能得到兩個查詢的兩個type

新建查詢:

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 
+1

請添加願望輸出與列名稱和有關係 –

回答

1

首先,使用union all除非你想承擔刪除重複的開銷(這是不可能在這種情況下)。你可以這樣做:

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); 

另外,如果你只希望從第二子查詢最一排,然後用聚合:

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; 

聚集查詢沒有GROUP BY總是返回一行。在這種情況下,如果WHERE子句過濾掉所有內容,則entity將爲NULL

+0

最後一個查詢返回我再次只有一行 – Gaga

+0

@Gaga。 。 。答案是針對「喜歡」表,因爲你的問題表明(對我)這是問題。然而,同樣的想法適用於第一個子查詢,所以只需在第一個子查詢中使用'max(idFavourite)'。 –

+0

您對JOIN的新查詢有什麼看法? – Gaga

相關問題