- 我有一个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列中的结果重复
什么是正确的查询,给我预期的结果?
1条答案
按热度按时间hkmswyz61#
现有联接返回每个客户的客户行、可选发票行和可选销售行的所有组合。
如果您希望发票和销售额位于不同的行上,则需要在不同的查询中将它们联接起来,然后合并这些查询。使用内部联接,这样,如果既没有销售额也没有发票,则不会得到两个空/空行,但如果两者都没有,则必须添加额外的查询来获取空/空行。