【问题标题】:SQL query FROM variable tablesSQL查询从变量表
【发布时间】:2011-11-09 21:16:15
【问题描述】:

我有 4 张桌子:一张有活动,一张有那些活动的服务员,还有两张包含有关这些服务员的信息,可能是单人或一群人人。数据库的设计看起来很公平,对吧?

然后我需要知道谁将参加特定活动。然后,我将使用常规连接获取活动参加者的 type 及其 id。但我还需要服务员的names,根据服务员的type,将其存储在两个不同的表中。

看看我做了什么:

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 )

这可行,但并不完美,因为它会为 groups 表返回重复的行。 我想结束的是这样的:(除了下面的那个不起作用)

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 数据库。感谢您的帮助!

【问题讨论】:

  • 您有两个选择 - 一个 IF 来拆分两个查询,或者动态 SQL...
  • @OMG 我最好骑小马:/
  • 如果usersgroups 表没有共同的id,那么您也可以使用UNION - 没有任何IF
  • +1 表示希望学习并改掉使用 php 过程代码完成 SQL 工作的习惯
  • 呃,A,B 连接语法是如此上个世纪。

标签: mysql sql join dynamic-sql


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多