连续48小时编码,我的头靠在墙上。请帮我解决这个小问题。
我的SQL查询是:
SELECT u.Firstname, u.Lastname, u.Rep, u.Email, u.Password, u.Gender, u.Level,
u.Birthday, u.Achievements, u.Height, u.Unit, u.cityid, u.countryid,
r.RegDate, ci.Name AS City, co.Name AS Country
FROM Users u, Registry r, Cities ci, Countries co
WHERE u.id = 1 AND r.uid = u.id AND u.cityid = ci.id AND u.countryid = co.id
LIMIT 1
我的问题是,我发现有时Users.cityid
和Users.countryid
是NULL
(这是正常的)。
我希望该查询为该用户提供所有其他信息(例如,返回NULL
City
和Country
),即使一个或两个这些字段是NULL
。如何使AND
- 部分有条件?
我希望我的模糊不清。
答案 0 :(得分:4)
如果我理解了你的情况,我认为你需要几个OUTER
加入。
SELECT ...
FROM Users u
INNER JOIN Registry r ON r.uid = u.id
LEFT JOIN Cities ci ON u.cityid = ci.id
LEFT JOIN Countries co ON u.countryid = co.id
WHERE u.id = 1
答案 1 :(得分:3)
您需要在表格上使用LEFT JOIN
,而不是使用WHERE
。
所以你的FROM变成了:
FROM Users u JOIN Registry r on u.id = r.uid
LEFT JOIN Cities ci ON u.cityid = ci.id
LEFT JOIN Countries co ON u.countryid = co.id
WHERE u.id = 1 LIMIT 1
LEFT JOIN
是OUTER
加入;它会在LEFT
(即出现的第一个)中最左边(因此JOIN
)项中的JOIN
(即OUTER JOIN
)条目中有一个条目但另一个表格的表格连接在一起不。 {{1}}对于这些情况非常有用,在这些情况下,您不必在所有表中都有数据条目,以满足查询的需要;它们起初可能会令人困惑,但它们对于很好地使用SQL非常重要。