[英]how to retrieve data with multiple join from multiple tables with status columns
我有三張桌子。 男童裝,女童裝和袖子裝
Boys_dress
id dress_name status
1 sample1 1
2 Sampel2 1
3 Sampel3 1
Girls_dress
id dress_name status
1 Sampel4 1
2 Sampee5 1
3 Sampel6 1
Sleeve_dress
id boys_dress_id girls_dress_id sleeve_name
1 2 2 Full
1 1 1 Half
1 1 3 Full
1 2 null Full
從上面的boys_dress_id和girls_dress_id是可選列。 boys_dress_id和girls_dress_id列中的任何一個都必須具有數據。 通過連接狀態為1的數據的禮服表,從帶有禮服名稱的袖子禮服表中檢索數據
我使用以下MySQL查詢檢索數據。 但是,由於condition status = 1
如果boys_dress_id或girls_dress_id為null,則無法獲取數據。 即使girls_dress_id為空,我也需要檢索boys_dress_id的數據。
select *
from sleeve_dress sd
left join Boys_dress bd on bd.id = sd.boys_dress_id
left join girls_dress gd on gd.id = sd.girls_dress_id
where bd.status = 1
AND gd.status = 1
移動的條件status
到on
的條款:
select . . . -- explicitly put the column names here
from sleeve_dress sd left join
Boys_dress bd
on bd.id = sd.boys_dress_id and bd.status = 1 left join
girls_dress gd
on gd.id = sd.girls_dress_id and gd.status = 1;
where
子句(如您所知)正在過濾掉不匹配的行,因為NULL
狀態不匹配1
。 on
子句使條件成為join
條件的一部分。
請注意,我將select *
替換為select . . .
select . . .
。 理性的人不同意select *
是否是一張桌子的好主意。 但是,您有多個表具有重疊的列名。 在這種情況下,您想顯式列出所需的列,可能為它們提供特定的別名(例如gd.status as gd_status
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.