我是 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/