【发布时间】:2014-08-16 03:32:41
【问题描述】:
我写了一个复杂的 SQL 查询(它)运行正确:
select user.id,user.name,profile.info,score.ammount
from user,profile,score
where email = 'example@email.com'
AND user.id = profile.user_id
AND user.id = score.user_id
AND profile.type = 'language'
AND score.type = 'amount'
此查询将返回:
[id] => 10002096
[name] => Erik
[info] => English
[ammount] => 510710
问题是如果user.id 与profile.user_id 不匹配,之前的匹配结果如(user.id, user.name) 没有返回? (即使找不到下一个匹配项,我也想返回它)
如果不匹配想要返回类似的东西:
[id] => 10002096
[name] => Erik
如何解决这个问题?
配置文件示例:
id user_id type info
1 1 language english
2 1 admin top
3 2 likes football
4 3 likes -
5 3 language english
id = 2 的用户没有语言
【问题讨论】:
-
好吧,没有看到任何数据,我的第一反应是“嗯?”但也许 tyr 将一些 AND 更改为 OR?你应该展示一些数据让我们理解你的意思
-
您对 AND 的含义存在根本性的误解。为了返回结果,它必须通过所有 AND 语句。
-
放弃旧式逗号语法进行连接操作。请改用 JOIN 关键字,并将连接谓词从 WHERE 子句移至 ON 子句。这将使您能够使用
LEFT JOIN进行“外部”连接操作,