MySQL使用COUNT从两个表中选择
我有两个表格如下:MySQL使用COUNT从两个表中选择,mysql,Mysql,我有两个表格如下: Table 1 "customer" with fields "Cust_id", "first_name", "last_name" (10 customers) Table 2 "cust_order" with fields "order_id", "cust_id", (26 orders) 我需要显示“客户id”“名”“姓”“订单id” 我需要通过cust\u idlike对order\u id进行计数,列出
Table 1 "customer" with fields "Cust_id", "first_name", "last_name" (10 customers)
Table 2 "cust_order" with fields "order_id", "cust_id", (26 orders)
我需要显示“客户id”“名”“姓”“订单id”
我需要通过cust\u id
like对order\u id
进行计数,列出每个客户下的订单总数
我运行下面的查询,但是,它计算所有26个订单,并将这26个订单应用到每个客户
SELECT COUNT(order_id), cus.cust_id, cus.first_name, cus.last_name
FROM cust_order, customer cus
GROUP BY cust_id;
您能建议/建议查询中有什么错误吗?也许左键连接会对您有所帮助
SELECT COUNT(order_id), cus.cust_id, cus.first_name, cus.last_name ]
FROM customer cus
LEFT JOIN cust_order co
ON (co.cust_id= cus.Cust_id )
GROUP BY cus.cust_id;
也许左路会合会对你有所帮助
SELECT COUNT(order_id), cus.cust_id, cus.first_name, cus.last_name ]
FROM customer cus
LEFT JOIN cust_order co
ON (co.cust_id= cus.Cust_id )
GROUP BY cus.cust_id;
你可以试试这个:
SELECT COUNT(cus_order.order_id), cus.cust_id, cus.first_name, cus.last_name
FROM cust_order cus_order, customer cus
WHERE cus_order.cust_id = cus.cust_id
GROUP BY cust_id;
你可以试试这个:
SELECT COUNT(cus_order.order_id), cus.cust_id, cus.first_name, cus.last_name
FROM cust_order cus_order, customer cus
WHERE cus_order.cust_id = cus.cust_id
GROUP BY cust_id;
这里的问题是您已经告诉数据库这两个表是如何“连接”的,或者它们应该通过什么连接: 请看这张图片: 这有效地允许您将两个表“连接”在一起,并在它们之间使用查询 因此,您可能需要使用以下内容:
SELECT COUNT(B.order_id), A.cust_id, A.first_name, A.last_name
FROM customer A
LEFT JOIN cust_order B //this is using a left join, but an inner may be appropriate also
ON (A.cust_id= B.Cust_id) //what links them together
GROUP BY A.cust_id; // the group by clause
根据您的评论,请提供更多信息: 左连接(右连接几乎完全相同,只是相反): SQL LEFT JOIN返回左表中的所有行,即使右表中没有匹配项。这意味着,如果ON子句与右表中的0(零)条记录匹配,则联接仍将在结果中返回一行,但右表中的每一列都返回NULL。~ 这意味着左连接返回左表中的所有值,加上右表中匹配的值,如果没有匹配的连接谓词,则返回NULL 如果希望从左侧的表中检索所有数据,并且仅从右侧检索匹配的数据,则将使用左连接 执行时间 虽然在这种情况下,公认的答案可能在小型数据集中效果良好,但在大型数据库中可能会变得“沉重”。这是因为它实际上不是为这种类型的操作而设计的 这就是引入联接的目的 数据库系统中的许多工作都是为了高效地实现联接,因为关系系统通常需要联接,但在优化其高效执行方面却面临困难。这个问题的出现是因为内部联接同时以交换和关联的方式进行操作 实际上,这意味着用户仅提供用于连接的表列表和要使用的连接条件,而数据库系统的任务是确定执行操作的最有效方式。查询优化器确定如何执行包含联接的查询。因此,通过允许dbms选择查询数据的方式,您可以节省大量时间 其他联接/摘要
- 内部联接将从两个表返回数据,其中每个表中的键都匹配
- 左联接或右联接将返回一个表中的所有行以及另一个表中的匹配数据
- 要查询多个表时,请使用联接
- 联接比查询
表的其他方法要快得多(在较大的数据集上可以看到更快的速度)>=2
SELECT COUNT(B.order_id), A.cust_id, A.first_name, A.last_name
FROM customer A
LEFT JOIN cust_order B //this is using a left join, but an inner may be appropriate also
ON (A.cust_id= B.Cust_id) //what links them together
GROUP BY A.cust_id; // the group by clause
根据您的评论,请提供更多信息: 左连接(右连接几乎完全相同,只是相反): SQL LEFT JOIN返回左表中的所有行,即使右表中没有匹配项。这意味着,如果ON子句与右表中的0(零)条记录匹配,则联接仍将在结果中返回一行,但右表中的每一列都返回NULL。~ 这意味着左连接返回左表中的所有值,加上右表中匹配的值,如果没有匹配的连接谓词,则返回NULL 如果希望从左侧的表中检索所有数据,并且仅从右侧检索匹配的数据,则将使用左连接 执行时间 虽然在这种情况下,公认的答案可能在小型数据集中效果良好,但在大型数据库中可能会变得“沉重”。这是因为它实际上不是为这种类型的操作而设计的 这就是引入联接的目的 数据库系统中的许多工作都是为了高效地实现联接,因为关系系统通常需要联接,但在优化其高效执行方面却面临困难。这个问题的出现是因为内部联接同时以交换和关联的方式进行操作 实际上,这意味着用户仅提供用于连接的表列表和要使用的连接条件,而数据库系统的任务是确定执行操作的最有效方式。查询优化器确定如何执行包含联接的查询。因此,通过允许dbms选择查询数据的方式,您可以节省大量时间 其他联接/摘要
- 内部联接将从两个表返回数据,其中每个表中的键都匹配
- 左联接或右联接将返回一个表中的所有行以及另一个表中的匹配数据
- 要查询多个表时,请使用联接
- 联接比查询
表的其他方法要快得多(在较大的数据集上可以看到更快的速度)>=2