[英]Select rows with Left Outer Join and condition - MySQL
PEOPLE PEOPLE_FAVS
id user_id fav_id
------ ------- ----------
1 1 1
2 1 2
3 1 5
4 2 1
5 2 2
6
我有兩個表PEOPLE和PEOPLE_FAVS,我試圖獲取所有不喜歡數字'5'的PEOPLE,所以它應該返回
PEOPLE
id
------
2
3
4
5
6
我正在嘗試使用此查詢:
SELECT `people`.`id`
FROM `people`
LEFT OUTER JOIN `people_favs` ON (`people_favs`.`user_id` = `people`.`id`)
WHERE (`people_favs`.`fav_id` != 5)
GROUP BY `people`.`id`
這是一個SQL提琴: http ://sqlfiddle.com/#!2/4102b8/3
SELECT p.*
FROM people p
LEFT
JOIN people_favs pf
ON pf.user_id = p.id
AND pf.fav_id = 5
WHERE pf.fav_id IS NULL
您實際上不需要使用外部聯接。 當您要查看一個表中的所有行時,無論它們在另一表中的情況如何,通常都使用外部聯接。 盡管在這種情況下它可以工作(如Strawberry的示例所示),但是您可以使用NOT EXISTS
運算符來檢查不喜歡5的id。
據我所知,性能幾乎沒有差異,但是此查詢要短一些。 我還覺得這有點合乎邏輯,因為您並沒有真正加入信息。 那只是個人觀點/想法。
嘗試這個:
SELECT id
FROM people
WHERE NOT EXISTS(SELECT id FROM people_favs WHERE fav_id = 5 AND user_id = id);
SQLFiddle示例使用您的數據。
您是否嘗試簡單地做到這一點:
SELECT DISTINCT `people`.`id`
FROM `people`
JOIN `people_favs` ON (`people_favs`.`user_id` = `people`.`id`)
WHERE (`people_favs`.`fav_id` <> 5)
GROUP BY `people`.`id`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.