希望这是一个简单的问题!
我有两个表,一个‘客户(S)’表和一个单独的'names‘表。其基础是一个客户端可以有一个或两个(最大)名称。我这样组织它们,这样每个“名字”都可以有一个不同的标题。这些表包括:
clients
+------------+-------------+------------+
| clientID | nameID1 | nameID2 |
+------------+-------------+------------+
| 1 | 1 | 2 |
| 2 | 3 | |
| 3 | 4 | |
+------------+-------------+------------+
names
+------------+-------------+------------+------------+
| nameID | surname | initials | titleID |
+------------+-------------+------------+------------+
| 1 | Banks | P | 1 |
| 2 | Smith | W | 2 |
| 3 | Wilson | BT | 2 |
| 4 | Jefferson | JP | 3 |
+------------+-------------+------------+------------+从何处检索titleID ...
titles
+------------+-------------+
| titleID | titleName |
+------------+-------------+
| 1 | Mr |
| 2 | Mrs |
| 3 | Miss |
+------------+-------------+例如,clientID =1就是P班克斯先生和W·史密斯夫人
问题是我不熟悉通过查询来得到上面的答案。
我不能尝试:
SELECT
clientID, names.surname, names.initials, titleName
FROM clients, names, titles
WHERE titleID = titleID AND
NameID1 = nameID AND
NameID2 = nameID如何正确地联接查询中的表以查找,例如clientID 1 = Mr P Banks '&' Mrs W Smith
发布于 2012-01-25 00:00:53
您需要加入Names (和Title)表两次,一次用于nameID1,一次用于nameID2。我假设客户端必须至少有一个名称,因此nameID1是INNER JOIN,而namedID2是可选的(可以为空),所以它是LEFT OUTER JOIN。
SELECT c.clientID, n1.surname, n1.initials, t1.titleName, n2.surname, n2.initials, t2.titleName
FROM clients c
INNER JOIN names n1 ON nameID1 = n1.nameID
INNER JOIN titles t1 ON n1.titleID = t1.titleID
LEFT OUTER JOIN names n2 ON nameID2 = n2.nameID
INNER JOIN titles t2 ON n2.titleID = t2.titleIDhttps://stackoverflow.com/questions/8989832
复制相似问题