创建涉及两个表的 SQL 查询,其中只有一个表对单个值是必需的



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

对于重复项,您可以将结果GROUPBY 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

最新更新