从数据库中获取数据

时间:2014-06-13 15:27:55

标签: sql database

编辑*我想获得实际信息。现在我会得到这样的东西: 短发 21 1

我想用加州替换21,用美国替换1

如果我有一个数据库,例如:

客户
名称
STATEID
CountryId

那么获取数据的最佳方法是什么?目前我有:

SELECT * FROM Client

SELECT * FROM Client
LEFT JOIN StateId, 
ON Client.StateId=State.Id

SELECT * FROM Client
LEFT JOIN CountryId, 
ON Client.CountryId=Country.Id

但这给了我3张桌子。这是应该如何读取数据库信息,还是应该返回一个包含其中信息的表?

2 个答案:

答案 0 :(得分:1)

您可以在同一查询中执行多个联接。类似的东西:

SELECT Client.Name, State.Name, Country.Name
FROM Client
LEFT JOIN State ON Client.StateId=State.Id
LEFT JOIN Country ON Client.CountryId=Country.Id

这假设您State表格和国家/地区的州位于Country表中。

答案 1 :(得分:1)

SELECT * FROM Client

SELECT * FROM Client
LEFT JOIN StateId, 
ON Client.StateId=State.Id

SELECT * FROM Client
LEFT JOIN CountryId, 
ON Client.CountryId=Country.Id

您可以使用以下

将其转换为1个查询
SELECT c.ClientID, c.Name, s.Name, co.Name from Client c 
inner join Country co on c.Countryid = co.ID 
left join state s on c.StateID = s.ID

我相信你会想要一个内部联接,但这是我的解释。无论表b中是否存在任何值,左连接都将返回表a中的所有值,因此,如果您想要所有人,无论他们是否有国家ID,那么是左连接,但如果您希望所有人都有国家关系,国家关系我相信你最初会想要一个内部联盟。第二个连接也可以是内部连接,具体取决于结束表结果中是否可以接受空值。

此外,左连接可能会返回一些不需要的结果,如果一个人在多个国家/地区或有多个状态,您可以返回超过必要的行数。在将两个左连接的内容实现到结果集之前,应该建立每个表的业务规则。

这可能适用于某个类,并且没有真正的业务目的,但最好不要假设并为您提供结果集的所有可能方案。

我正在做的是返回所有具有相应countryID的客户端,我不想在这里返回空值,因为在你的下一个连接关系中,如果country是客户端和状态之间的链接,你也将返回null。 / p>