我是SQL新手,在弄清楚如何创建我需要的查询类型时遇到了麻烦。
详情如下。 我有两个表需要从中检索数据。它们是">客户"和"出价">
"客户端">表具有我需要获取的以下值:">ClientId
"、"ClientFirstName
"、"ClientSurName
"、"ClientAddressLine1
"、"ClientAddressLine2
"、"ClientAddressLine3
"、"telephoneHome
"、"telephoneWork
"、"telephoneMobile
"、"clientFax
"、"clientEmail
">
从">出价">表中,我只需要获得"clientId
">
我的问题是我需要在表格中显示所有客户的列表,无论他们是否有与之关联的出价。如果他们有出价,我还需要使用">Y"或"N">显示。
我已经尝试了多种不同的方法来做到这一点,但无济于事。
我不能使用 UNION,因为"客户"和"出价"表包含不同数量的列,并且使用 JOIN(至少据我所知如何使用它)仅显示其"clientId
"对应于"出价"表中的"clientId
">的客户。
就目前而言,我的sql查询如下所示:
SELECT Client.*, Bids.clientId AS clientBidId FROM Client JOIN Bids ON Client.clientId = Bids.clientId ORDER BY Client.clientId ASC
如前所述,这不会显示没有出价的客户。出于某种原因,它也在重复客户(我怀疑这是基于他们与之关联的出价数量)。
通常,我会一直用头撞桌子,直到我想出一个解决方案,但我发现自己的时间有限,而且我完全不知道如何解决这个问题,因为我对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