Mysql 在sql中从多个表获取数据
表1:发票(库存id、库存价值、客户id)Mysql 在sql中从多个表获取数据,mysql,sql,Mysql,Sql,表1:发票(库存id、库存价值、客户id) 表2:客户(客户id、销售代表) 表3:成员(成员id、成员类别、成员类型、客户id) 注1:每个客户支付多张发票。(一对多关系)。 注2:每个客户为一个或多个成员付费(因此多个成员可能与一个客户相关)。 注3:每个成员有一个类别,可以是1“代表个人”或2“代表团体”。 注4:每个成员的类型可以是1“表示新”或2“表示更新” 我想获得销售代表=1及其成员类别=10及其成员类型的客户的发票价值字段的总数=123 例如:如果这些客户的销售代表是1,而他们支
表2:客户(客户id、销售代表)
表3:成员(成员id、成员类别、成员类型、客户id) 注1:每个客户支付多张发票。(一对多关系)。
注2:每个客户为一个或多个成员付费(因此多个成员可能与一个客户相关)。
注3:每个成员有一个类别,可以是1“代表个人”或2“代表团体”。
注4:每个成员的类型可以是1“表示新”或2“表示更新” 我想获得
销售代表=1及其成员类别=10及其成员类型的客户的发票价值字段的总数=123
例如:如果这些客户的销售代表是1,而他们支付的会员是新会员和个人会员,那么客户支付的发票总额是多少
我试过:
SELECT Sum(invoices.inv_value) AS total
FROM invoices,
customers,
members
WHERE invoices.cust_id = customers.cust_id
AND members.custid = customers.cust_id
AND members.category = {$category}
AND members_type = {$type}
AND customers.sales_rep = {$id}";
及
但两者都返回发票金额的两倍。
例:发票表中120美元的1张发票使用这些sql查询返回240美元
如何解决此问题?这是您的问题:
SELECT sum(i.inv_value) as total
FROM members m INNER JOIN
customers c
ON m.custid = c.cust_id INNER JOIN
invoices i
ON c.cust_id = i.cust_id
WHERE c.sales_rep = {$id} AND
m.category = {$category} AND
m.type = {$type}";
(不要使用带有逗号的隐式JOIN
语法。它既古老又不太强大。)
问题可能是两个成员可能具有相同的客户id。您可以通过运行以下命令来检查这一点:
select m.cust_id, count(*)
from members m
group by m.cust_id
having count(*) > 1;
客户ID也可能在客户
中重复
假设重复项仅在成员中
,将查询更改为存在
:
SELECT sum(i.inv_value) as total
FROM customers c
ON INNER JOIN
invoices i
ON c.cust_id = i.cust_id
WHERE c.sales_rep = {$id} AND
EXISTS (SELECT 1
FROM members m
WHERE m.custid = c.cust_id AND
m.category = {$category} AND
m.type = {$type}
);
似乎您是从发票
中获取库存值
,它与客户
有多对一关系,但客户
表和成员
表有一对多关系
假设你有以下数据
发票表
invoices.cust_id invoices.inv_value
custid1 100
customer.cust_id
custid1
members.cust_id members.category
custid1 1
custid1 2
客户表
invoices.cust_id invoices.inv_value
custid1 100
customer.cust_id
custid1
members.cust_id members.category
custid1 1
custid1 2
成员表
invoices.cust_id invoices.inv_value
custid1 100
customer.cust_id
custid1
members.cust_id members.category
custid1 1
custid1 2
连接所有三个表时
customer.cust_id members.cust_id invoices.inv_value members.category
custid1 custid1 100 1
custid1 custid1 100 2
如果您注意到在2member\u类别中存在custid1
,发票价值也会重复
要解决这个问题,首先可以获取不同的记录,然后对这些不同的记录求和将帮助您解决问题,如下所示
解决方案
SELECT Sum(invoices.inv_value) AS total
FROM(
SELECT DISTINCT members.custid, invoices.inv_value inv_value
FROM members
INNER JOIN customers
ON members.custid = customers.cust_id
INNER JOIN invoices
ON customers.cust_id = invoices.cust_id
WHERE customers.sales_rep = {$id}
AND members.category = {$category}
AND members.type = {$type});
添加提供不同返回/预期结果的示例表数据。(以及格式良好的文本。)提供表架构、表之间的关系、样本数据和预期结果确保成员中没有重复。类别和成员。键入对于相同的客户id
可能重复的@jarlh,预期结果为“单一值”表示特定客户的发票总金额。仍然返回双倍的值:(请检查您的代码。我认为这是合理的,但运行时出现错误,没有返回值。mysqli_fetch_assoc()参数1应为mysqli_result,布尔值,因为错误可能是由于您在代码中使用的方式造成的。请检查