mysql - 创建涉及两个表的 SQL 查询,其中一个表只需要一个值

标签 mysql sql

我是 SQL 的新手,我不知道如何创建我需要的那种查询。

详情如下。 我有两个表需要从中检索数据。它们是“客户”“出价”

'Client' 表具有我需要获取的以下值:
'ClientId', 'ClientFirstName', 'ClientSurName', 'ClientAddressLine1', 'ClientAddressLine2', 'ClientAddressLine3', 'telephoneHome', 'telephoneWork', 'telephoneMobile ', 'clientFax', 'clientEmail'

'Bids'表中,我只需要获取'clientId'

我的问题是我需要在表格中显示所有客户的列表,无论他们是否有与之关联的出价。我还需要使用 'Y''N' 显示他们是否有出价。

我尝试了多种不同的方法来做到这一点,但无济于事。
我不能使用 UNION,因为 'Client''Bids'表包含不同数量的列并且使用 JOIN(至少据我所知如何使用它)仅显示其 'clientId' 对应于 的客户端>“出价” 表中的“clientId

就目前而言,我的 sql 查询如下所示:

SELECT Client.*, Bids.clientId AS clientBidId FROM Client JOIN Bids ON Client.clientId = Bids.clientId ORDER BY Client.clientId ASC

如前所述,这不会显示没有出价的客户。由于某种原因,它也在复制客户(我怀疑这是基于他们与他们相关联的出价数量)。

通常情况下,我会不停地用头撞 table ,直到想出解决方案,但我发现自己的时间有限,而且我完全不知道如何解决这个问题,因为我是如此SQL 的新手,所以我来到这里 - 这是第一次 - 看看你们中是否有人可以提供一些帮助。即使为我指出正确的方向也会有很大的帮助。

最佳答案

这正是 LEFT JOIN 的用途;辅助表中没有对应行的行将包含 NULL

对于复制,您可以GROUP 结果BY clients.id。我包括了出价计数,因为它至少与“Y”/“N”一样有用。

SELECT clients.*, count(bids.id) as bids
FROM clients
  LEFT JOIN bids ON bids.client_id = clients.id 
  GROUP BY clients.id;

考虑这个功能完整的例子:http://sqlfiddle.com/#!2/0c257/1

关于mysql - 创建涉及两个表的 SQL 查询,其中一个表只需要一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22275898/

相关文章:

MySQL 字段 DATETIME 截断 ISO8601

mysql - 如何将这两个查询语句合并为一个查询语句

java - 外部库中的 jar 但无法在代码中导入

php - Codeigniter 3 MySQLi 安全数据库连接

php - 计算距离并排序

java - Hibernate - 回滚 : org. hibernate.MappingException:未知实体

sql - 适当的 SELECT 语句

mysql - SQL:在不知道所有列名的情况下从连接中的一个表中选择所有值?

php - 如何更改 phpMyAdmin 中的表前缀?

sql - oracle用户在sql中定义分隔符