簡體   English   中英

如何從具有狀態列的多個表中檢索具有多個聯接的數據

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

移動的條件statuson的條款:

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.

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