在mysql中加入

njthzxwz  于 2023-02-15  发布在  Mysql
关注(0)|答案(1)|浏览(85)
    • 我有一个3表在mysql**

1-客户端表

PK

| 客户数量|客户名称|
| - ------|- ------|
| 1个|亚历克斯|
| 第二章|亚当|
2-发票表

FK

| 编号_客户_库存|INV_值|
| - ------|- ------|
| 1个|一千|
| 1个|二○ ○ ○年|
3-销售退货表

FK

| 客户端SR数量|返回值|
| - ------|- ------|
| 1个|三百|
| 1个|四百|
我的问题是

SELECT  NAME_CLIENT , NUM_CLIENT , INV_VALUE , Return_VALUE  FROM client

             LEFT JOIN Invoice 
             ON NUM_CLIENT_INV = NUM_CLIENT 
             
             LEFT JOIN Sales returns
             ON NUM_CLIENT_SR = NUM_CLIENT

预期结果为:
| 客户名称|客户数量|INV_值|返回值|
| - ------|- ------|- ------|- ------|
| 亚历克斯|1个|一千|零|
| 亚历克斯|1个|零|三百|
| 亚历克斯|1个|二○ ○ ○年|零|
| 亚历克斯|1个|零|四百|
| 亚当|第二章|零|零|
但给出的结果是:
| 客户名称|客户数量|INV_值|返回值|
| - ------|- ------|- ------|- ------|
| 亚历克斯|1个|一千|三百|
| 亚历克斯|1个|一千|四百|
| 亚历克斯|1个|二○ ○ ○年|三百|
| 亚历克斯|1个|二○ ○ ○年|四百|
| 亚当|第二章|零|零|
INV_VALUE和Return_VALUE列中的结果重复
什么是正确的查询,给我预期的结果?

hkmswyz6

hkmswyz61#

现有联接返回每个客户的客户行、可选发票行和可选销售行的所有组合。
如果您希望发票和销售额位于不同的行上,则需要在不同的查询中将它们联接起来,然后合并这些查询。使用内部联接,这样,如果既没有销售额也没有发票,则不会得到两个空/空行,但如果两者都没有,则必须添加额外的查询来获取空/空行。

SELECT  NAME_CLIENT , NUM_CLIENT , INV_VALUE , NULL as Return_VALUE  FROM client
INNER JOIN Invoice
    ON NUM_CLIENT_INV = NUM_CLIENT 
UNION ALL
SELECT  NAME_CLIENT , NUM_CLIENT , NULL , Return_VALUE  FROM client
INNER JOIN Sales returns
    ON NUM_CLIENT_SR = NUM_CLIENT 
UNION ALL
SELECT  NAME_CLIENT , NUM_CLIENT , NULL , NULL  FROM client
LEFT JOIN Invoice
    ON NUM_CLIENT_INV = NUM_CLIENT 
LEFT JOIN Sales returns
    ON NUM_CLIENT_SR = NUM_CLIENT 
WHERE NUM_CLIENT_INV IS NULL AND NUM_CLIENT_SR IS NULL
ORDER BY NUM_CLIENT

相关问题