Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将两个查询合并为一个查询以选择相关列_Mysql_Sql_Database_Foreign Keys_Subquery - Fatal编程技术网

Mysql 将两个查询合并为一个查询以选择相关列

Mysql 将两个查询合并为一个查询以选择相关列,mysql,sql,database,foreign-keys,subquery,Mysql,Sql,Database,Foreign Keys,Subquery,我有两张桌子,一张叫做customer\u sales,另一张叫做distinct\u customers 此查询返回每个d_id的销售总数和客户编号(但没有客户名称) 此查询从d_id返回客户信息(包括名称) select dc.c_name, dc.c_number, dc.d_name from dcust dc where d_id ='A00007'; 我想结合这两个查询,这样我就可以得到这样的结果 |-------|--------|-----------|-----------

我有两张桌子,一张叫做customer\u sales,另一张叫做distinct\u customers

此查询返回每个d_id的销售总数和客户编号(但没有客户名称)

此查询从d_id返回客户信息(包括名称)

select  dc.c_name, dc.c_number, dc.d_name from dcust dc where d_id ='A00007';
我想结合这两个查询,这样我就可以得到这样的结果

|-------|--------|-----------|-------------|
|d_id   | c_name |   d_name  | total_sales |
|-------|--------|-----------|-------------|
最好的方法是什么? 我尝试了不同的方法,不断地得到重复的信息

不同的客户样本数据

客户销售样本数据


您只需加入表:

select cs.d_id, dc.c_name, dc.d_name, cs.total_sales
from dcust d inner join cs_sales cs 
on d.d_id = cs.d_id
where d_id = 'A00007'

以下代码应完成此工作:

SELECT cs.d_id, dc.c_name, dc.d_name, SUM(cs.total_sales)
FROM cs_sales cs
LEFT JOIN dcust dc
ON cs.d_id=dc.d_id
GROUP BY cs.d_id, dc.c_name, dc.d_name

您也应该在
customer\u number
上加入:

SELECT cs.d_id, dc.c_name, dc.d_name, cs.total_sales
FROM cs_sales cs INNER JOIN dcust dc
ON cs.d_id = dc.d_id AND dc.customer_number = cs.customer
WHERE cs.d_id ='A00007'

很奇怪,两个表中都有经销商id。根据命名,我怀疑您只想加入客户而不是经销商:

SELECT cs.d_id, c.c_name, c.d_name, cs.total_sales
FROM cs_sales cs INNER JOIN
     dcust c
     USING (c.customer_number) 
WHERE cs.d_id = 'A00007';
我把
cs.d_id
理解为“客户注册的经销商”。我不明白为什么它必须与实际销售的地点相同。因此,如果您希望在给定的经销商处进行销售,请使用
cs\u sales
中的经销商信息


如果列是冗余的,然后,您应该修复数据模型,这样该列就不会在两个表之间重复。

最好显示您尝试过的内容以及您选择的结果got@DmitryReutov我尝试了一些更好的方法,类似于下面的答案,但它会返回重复的记录,其中c_name和d_name重复。您的问题中的查询只返回1行每个?@forpas我都添加了一些样本数据。这让我发疯了,所以每个表中都有多行d_id='A00007',您在问题中没有澄清这一点。您的预期输出是什么?我尝试了类似的方法,但这会返回重复的结果<代码>A00007 Deandra Craft A00007 Ibex经销商52425 A00007 Deandra Craft A00007 Ibex经销商53790 A00007 Deandra Craft A00007 Ibex经销商5927 A00007 Deandra Craft A00007 Ibex经销商23069 A00007 Deandra Craft A00007 Ibex经销商56121这几乎正是我需要的,但不是返回金额,我怎样才能让它返回每行的每笔销售<代码>A00007 Neomi Ashbaug A00007 Ibex经销商1695348 A00007 Oswaldo Klein A00007 Ibex经销商1695348 A00007 Rachele Nazar A00007 Ibex经销商3390696 A00007 Raisa Virgen A00007 Ibex经销商1695348 A00007 Reynalda陪审团A00007 Ibex经销商1695348 A00007 Rolando Kibbe A00007 Ibex经销商1695348是否给出了重复的结果?(正如您在@thiagotrss的评论中所提到的)请解释您希望在哪个领域进行重复数据消除,以及在哪个领域进行重复数据消除!你是个天才。就这样。非常感谢你。
SELECT cs.d_id, c.c_name, c.d_name, cs.total_sales
FROM cs_sales cs INNER JOIN
     dcust c
     USING (c.customer_number) 
WHERE cs.d_id = 'A00007';