簡體   English   中英

MySQL加入三個表,如果為null則顯示0

[英]MySQL Join three tables and display 0 if null

我有三張桌子:

person_table

ID | 名字| 性別

1 | 喬|

2 | 簡|女

3 | 珍妮特|

4 | 傑伊| 男等...


product_table

ID | 名稱

1 | 雜志

2 |

3 |紙

4 | 小說

等等...


** person_product

為person_id | product_id | 數量

1 | 1 | 1

1 | 3 | 3

2 | 3 | 1

4 | 4 | 2

等等...


我試圖創建一個返回如下表的查詢:person_id | person_name | PRODUCT_NAME | 數量,但我不能這樣,如果讓我們說約翰沒有書,它應該顯示(johns id)約翰|書| 0而不是只是跳過這一行。 我哪里做錯了? 這是我設法提出的:

SELECT p.*, f.name, l.quantity 
FROM person_product AS l 
INNER JOIN people_table AS p ON l.person_id=p.id 
INNER JOIN product_table AS f ON l.product_id=f.id
ORDER BY id`

您似乎正在針對所有具有相關數量的產品生成所有人的報告; 在大型數據集上,這可能需要一段時間,因為您沒有專門為數量以外的任何人加入產品:

SELECT
p.id,
p.name,
p.gender,
f.name,
IFNULL(l.quantity,0) AS quantity

FROM person_table AS p

JOIN product_table AS f

LEFT JOIN person_product AS l
    ON l.person_id = p.id
    AND l.product_id = f.id

ORDER BY p.id, f.name

結果如下:

在此輸入圖像描述

這或多或少是你追求的嗎?

你需要從people_table開始,而不是使用左連接,你需要帶來其他表數據。

如果你需要0值,你可以使用函數IFNULL

SELECT p.*, f.name, IFNULL(l.quantity,0)
FROM people_table AS p
LEFT JOIN  person_product AS l  ON l.person_id=p.id
LEFT JOIN product_table AS f ON l.product_id=f.id
ORDER BY p.id

如果沒有書不應出現在表中,試試這個(易於理解):

SELECT NAME
    ,'0'
    ,'0'
FROM person_table
WHERE id NOT IN (
        SELECT person_id
        FROM person_product
        )

UNION

SELECT person_id
    ,product_id
    ,quantity
FROM person_product;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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