SQL查询FROM变量表

时间:2011-09-03 21:04:49

标签: mysql sql join dynamic-sql

我有4个表:一个有事件,一个有事件'服务员,另外两个包含有关这些服务员的信息,可能是单个人或一组人。数据库的设计似乎很公平,对吗?

然后我需要知道谁将参加某个特定活动的名称。然后,我将使用常规联接获取活动的服务员的类型,以及 id 。但我还需要服务员的名称,并根据服务员的类型存储在两个不同的表中。

看看我做了什么:

SELECT
    ep.type_attendant 'type',
    ep.id_attendant 'id',
    IF( ep.type_attendant = 'user', CONCAT( u.firstname, ' ', u.lastname ), g.name ) 'fullname'
FROM
    events_attendants ep,
    events e,
    users u,
    groups g
WHERE
    ep.id_event = e.id AND
    ep.id_attendant = IF( ep.type_attendant = 'user', u.id, g.id )

虽然有效,但并不完美,因为它会为表返回重复的行。 我想最终得到的是:(除了下面的那个不起作用)

SELECT
    ep.type_attendant 'type',
    ep.id_attendant 'id',
    IF( ep.type_attendant = 'user', CONCAT( u.firstname, ' ', u.lastname ), g.name ) 'fullname'
FROM
    events_attendants ep,
    events e,
    IF( ep.type_attendant = 'user', users u, groups g ) -- variable table
WHERE
    ep.id_event = e.id AND
    ep.id_attendant = IF( ep.type_attendant = 'user', u.id, g.id )

我也可以运行两个查询,并将结果与​​PHP合并,但我是那种喜欢学习的人。

MySQL数据库btw。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

    SELECT
        ep.type_attendant AS `type`,
        ep.id_attendant   AS id,
        CONCAT( u.firstname, ' ', u.lastname ) AS fullname
    FROM
        events_attendants ep
      JOIN
        events e    ON ep.id_event = e.id 
      JOIN
        users u     ON ep.id_attendant = u.id
    WHERE
        ep.type_attendant = 'user'
UNION ALL
    SELECT
        ep.type_attendant,
        ep.id_attendant,
        g.name  
    FROM
        events_attendants ep
      JOIN
        events e    ON ep.id_event = e.id 
      JOIN
        groups g    ON ep.id_attendant = g.id
    WHERE
        ep.type_attendant <> 'user'