[英]Mysql - Left join issues in the where clause
我有兩個表:activity和activity_images,外鍵約束是:
activities.id = activitiy_images.activity_id
現在,某些活動具有圖像,而有些則沒有,這意味着對於特定的activity.id,activity_images上可能沒有條目。
我想默認獲取所有數據,而不管activity_images中存在的數據如何。
以下是我的查詢:
select a.*,a.id as 'activity_id',b.*
from activities a
left join activity_images b on a.id = b.activity_id
where b.image_type='main' LIMIT 0, 9
問題在於輸出。 上面的查詢僅向我提供了匹配行的數據,其中b.image_type ='main'。 它不會輸出activity_images中沒有條目的行。
我想要所有行,但同時我要確保b.image_type ='main',因為image_type還有其他值,我只想獲取image_type ='main'的值(如果有的話一場比賽)。
請指教 。 提前致謝。
select a.*,a.id as 'activity_id',b.*
from activities a
left join activity_images b on a.id = b.activity_id
where b.image_type='main' OR b.image_type IS NULL
LIMIT 0, 9
這會做你想要的嗎?
在這種情況下,我建議將image_type設置為非null列,否則您將獲得具有匹配行的數據,但image_type實際上設置為null。
嘗試子查詢。 這將僅選擇活動圖像表中具有首選圖像類型的行,並且仍將選擇活動表中的所有內容:
SELECT a.*,b*
FROM activities a
LEFT JOIN (
SELECT * FROM activity_images WHERE image_type = 'main'
) b ON a.id = b.activity_id;
SELECT * FROM activity_images WHERE image_type = 'main' a;
當WHERE
子句中的條件應用於聯接表時,基本上將其視為INNER JOIN
。
解決此問題的正確方法是將條件移到ON
子句中:
SELECT a.*, a.id as 'activity_id', b.*
FROM activities a
LEFT JOIN activity_images b
ON b.activity_id = a.id
AND b.image_type = 'main'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.