Php 与许多人的关系,没有这个

Php 与许多人的关系,没有这个,php,mysql,sql,doctrine,Php,Mysql,Sql,Doctrine,我希望获得所有不带House的用户(即-不在UserHouse表中)-这将返回用户3和5 我知道,我可以使用: User: id | name 1 | one 2 | two 3 | three 4 | four 5 | five House: id | name 1 | London 2 | Barcelona UserHouse: id_user | id_house 1 | 1 2 | 2 4 | 1 $q = Doctri

我希望获得所有不带House的用户(即-不在UserHouse表中)-这将返回用户3和5

我知道,我可以使用:

User:
id | name
1  | one
2  | two
3  | three
4  | four
5  | five


House:
id | name
1  | London
2  | Barcelona

UserHouse:
id_user | id_house
 1      |  1
 2      |  2
 4      |  1


$q = Doctrine_Query::create()
  ->from('User u')
   // many selectors here
  ->leftJoin('u.UserHouse uh')
  ->addWhere('????????');

$users = $q->execute();
和用户的下一个关系,但我必须拥有和使用:

->from('UserHouse uh')
因为我将此查询与许多选择器一起使用-无法编辑此查询。我必须从('User u')开始使用->

那么,我必须填写->addWhere('?????????')什么内容才能返回没有房子的用户


如果不使用条令,如何使用简单的SQL实现这一点?

在SQL中,这种类型的查询需要一种称为
异常联接的方法。一些RDBMS实际上将其作为单独的类型实现(如DB2),而其他RDBMS则需要使用变通方法。在您的情况下,它相当于(SQL):

这是预期的“不在房子里”记录

在这个网站的许多地方都有类似的例子

我从来没用过教义,所以我帮不了你。但我最好的猜测是:

SELECT User.* 
FROM User
LEFT JOIN UserHouse
ON UserHouse.id_user = User.id
WHERE UserHouse.id_user IS NULL


为什么会有这么多的反对票?在任何情况下,这基本上是一个
异常连接
类型的查询-这里有很多mySQL的例子;其中大多数涉及检查
左联接
-表的某些属性是否为
。。。我不知道这是怎么翻译成教义的,不过('uh是空的'?)。@X-Zero请添加新的答案:)
SELECT User.* 
FROM User
LEFT JOIN UserHouse
ON UserHouse.id_user = User.id
WHERE UserHouse.id_user IS NULL
addWhere('uh IS NULL')
addWhere('uh.id_user IS NULL')