【问题标题】:Check status in other table with relation用关系检查其他表中的状态
【发布时间】:2012-09-12 15:39:30
【问题描述】:

我在数据库中:

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。

【问题讨论】:

标签: php mysql sql symfony1 doctrine


【解决方案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

【讨论】:

    【解决方案2】:

    如果你真的只能用 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;
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:

        如果你使用的是 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-09-13
          • 1970-01-01
          • 2016-10-10
          • 2016-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多