簡體   English   中英

MySQL-where子句中的左聯接問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM