如何在一个SQL查询中连接3个或更多表

时间:2011-07-04 00:36:27

标签: mysql

通常我会做这样的事情。

#1 first query
 while () :
    #2 2nd queries
    #3 3rd queries
 endwhile;

得到一个结果。现在我想在一个查询中组合它们。怎么办呢。

Table#1
-------------------------------------------
SELECT 
UserID, UserName, CountryCode, StateCode, CityCode, VillageCode, UserRace, UserStatus, UpdateStatus 
FROM user_locality
WHERE CountryCode = '{$getCountryCode}'

Table#2
-------------------------------------------
SELECT 
* 
FROM user_addresses 
WHERE address_UserID = '{$UserID}'

Table#3
-------------------------------------------
SELECT 
phone_UserID, phone_m, phone_h, phone_o 
FROM user_phones 
WHERE phone_UserID  = '{$UserID}'

谢谢。

2 个答案:

答案 0 :(得分:2)

您需要使用JOIN子句。有不同类型的连接。我在下面使用LEFT JOIN,会选择user_locality中的所有记录,并尝试匹配user_addressesuser_phones的记录。

SELECT    *
FROM      `user_locality`
LEFT JOIN `user_addresses`
ON        `user_addresses`.`address_UserID` = `user_locality`.`UserID`
LEFT JOIN `user_phones`
ON        `user_phones`.`phone_UserID` = `user_locality`.`UserID`
WHERE     `user_locality`.`CountryCode` = '{$getCountryCode}'

指出此查询的一件事是每个拥有1个以上电话或地址的用户会产生超过1行的行。

答案 1 :(得分:0)

如果我理解正确的话,这样的事情应该有效:

SELECT (fields you want) FROM user_phones, user_addresses, user_locality WHERE user_locality.CountryCode = '{$getCountryCode}' AND user_phones.phone_userID = user_locality.UserID AND user_addresses.address_UserID = user_phones.phone_UserID

通常,SQL的优点在于您可以在FROM字段中指定MULTIPEL表,从而允许您通过声明在结果中保留行组合的条件来进行连接。例如,如果你这样做

SELECT * FROM table_a, table_b

您将获得所有可能的行组合。因此,如果A有10行而B有25行,那么你将获得250行结果!添加WHERE table_a.something = table_b.something将为您提供所需的内容。