mysql连接问题与where条件有关

时间:2014-06-20 11:17:38

标签: php mysql left-join inner-join

我有两张桌子

  Profile                         Status
  profile_id |name | active       status_id |profile_id|age

我需要获取配置文件“active”为1且状态年龄大于10

的状态

此查询在profile_id匹配时返回

  Select * from 
  status LEFT JOIN ON status.profile_id = profile.profile_id 

但是当我放置where条件时它什么也没显示

  Select * from 
  status LEFT JOIN ON status.profile_id = profile.profile_id
  where profile.active= 1 and status.age > 40

左边是否加入了正确的JOIN类型?

6 个答案:

答案 0 :(得分:1)

您错过了加入表名称,profile.enabled应该是profile.active试试这个:

 Select * 
 from 
      status  
      LEFT JOIN profile ON status.profile_id = profile.profile_id
 where 
      profile.active = 1 and status.age > 40

OR

 Select * 
 from 
      status  
      LEFT JOIN profile ON status.profile_id = profile.profile_id and status.age > 40
 where 
      profile.active = 1 

答案 1 :(得分:0)

profile.enabled更正为profile.active,并且LEFT JOIN上的table name也会丢失。试试这个

SELECT *
FROM status
INNER JOIN profile ON status.profile_id = profile.profile_id
WHERE profile.active = 1
  AND status.age > 40

答案 2 :(得分:0)

试试这个。

SELECT *
FROM Profile p,
     Status s
WHERE p.profile_id=s.profile_id
  AND p.active=1
  AND s.age>10

另外请交叉检查您的第二个查询,它已启用字段,但在配置文件中不存在。

答案 3 :(得分:0)

它似乎错过了左连接子句中的表名。 在你的帖子中,你要求年龄大于10岁,并且在sql命令中它是40岁。

更改

Select * from 
  status LEFT JOIN ON status.profile_id = profile.profile_id
  where profile.enabled = 1 and status.age > 40

  Select * from  status LEFT JOIN profile ON status.profile_id =
profile.profile_id   where profile.active= 1 and status.age > 40

答案 4 :(得分:0)

如果错过了第二张桌子的表名。

您的查询应该是这样的:

SELECT s.* FROM 
  status  s LEFT JOIN profile p ON s.profile_id = p.profile_id
  WHERE p.active= 1 and s.age > 40

答案 5 :(得分:0)

缺少'个人资料' LEFT JOIN

之后的表格
 SELECT * FROM 
      status LEFT JOIN profile 
      ON status.profile_id = profile.profile_id
      AND profile.active= 1 AND status.age > 40