1

我在数据库中有:

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

我如何在 SQL 查询中使用 IF 和 ISSET?

从用户中选择 *

我想收到:

用户:

name | has_house
1    | yes
2    | yes
3    | no
4    | yes
5    | no 

我必须从SELECT * from User开始我的查询。我不能在 House 或 UserHouse 中加注星标。有可能吗?如果是,如何?

我也可以使用 DOCTRINE 和 Symfony。

4

4 回答 4

1

尝试使用LEFT JOIN

SELECT  a.id, IF(COALESCE(b.id_user, 1) = 1, 'no', 'yes') has_house
FROM    user a
        LEFT JOIN userhouse b
            on a.id = b.id_user
于 2012-09-12T15:42:47.360 回答
1

如果您真的只能使用SELECT * from User开始查询,您可以试试这个:

SELECT * FROM User
  JOIN (
    SELECT
      User.id id_user,
      IF(UserHouse.id_house > 0, 'yes', 'no') AS has_house
    FROM
        User
      LEFT JOIN
        UserHouse ON UserHouse.id_user = User.id
    ) HasHouse ON HasHouse.id_user = User.id;
于 2012-09-12T15:56:30.993 回答
1

如果您使用的是 sql server,则应该使用 case one 而不是 if 语句。

SELECT   user.id, 'Has House' =
  CASE COALESCE(b.id_user, 0)
     WHEN 0 THEN 'No'
     ELSE 'Yes'
  END
FROM user as u leftjoin userhouse as uh on u.id = uh.id_user

http://msdn.microsoft.com/en-us/library/ms181765.aspx

于 2012-09-12T15:57:07.023 回答
1

可能这会有所帮助,

http://msdn.microsoft.com/en-us/library/ms182717.aspx

于 2012-09-12T16:38:50.357 回答