【问题标题】:Join with multiple conditions加入多个条件
【发布时间】:2013-07-22 04:38:49
【问题描述】:

我的整个查询有点复杂,所以我将尝试显示您需要了解我的问题,我正在从数据库中获取票证,它显示标题、创建者、负责人门票,以及最后一个更新者,对于创建者和负责人,我在 tickets_users.users_id 中找到他们的 ID 以及他们的类型 1 或 2,具体取决于他们是门票的创建者还是负责人,标题以及票证本身的所有信息,该表被命名为tickets,现在用户的ID、他们的名字等是users

所以我的查询看起来像这样:

SELECT
tickets.id,
    tickets.name,
    GROUP_CONCAT(
            CASE WHEN tickets_users.type = 1 THEN 
                        CONCAT(users.firstname, ' ', users.realname)
            END) AS creator,
    GROUP_CONCAT(
            CASE WHEN tickets_users.type = 1 THEN 
                        CONCAT(tickets_users.users_id)
            END) AS creator_id,
    GROUP_CONCAT(
            CASE WHEN tickets_users.type = 2 THEN 
                        CONCAT(users.firstname, ' ', users.realname)
            END) AS in_charge,
    GROUP_CONCAT(
            CASE WHEN tickets_users.type = 2 THEN 
                        CONCAT(tickets_users.users_id)
            END) AS in_charge_id,
    tickets.date,
    tickets.priority,
    tickets.date_mod,
    tickets.status,
    tickets.users_id_lastupdater,
MAX(CASE WHEN tickets.users_id_lastupdater = users.id
         THEN CONCAT(users.firstname, ' ', users.realname) 
    END) AS last_updater,
tickets.content
FROM
    tickets
    JOIN tickets_users ON tickets_users.tickets_id = tickets.id
    JOIN users ON users.id = tickets_users.users_id
    WHERE tickets.id = ?");

我的问题是JOIN users ON users.id = tickets_users.users_id 它适用于负责人和创建者,但如果不是负责人回复或修改票证,他将不会出现在“上次修改者”中,因为last_updater @987654328 @ 在表 tickets 中。 我尝试加入JOIN users ON (users.id = tickets_users.users_id AND , glpi_tickets.users_id_lastupdater),但没有成功。有什么想法吗?

【问题讨论】:

  • ON users.id IN (tickets_users.users_id, tickets.last_updater) ?
  • 几乎可以工作,即使他不是负责人或创建者,它也会显示 last_updater,但现在由于某种原因它正在将 last_updater 添加到创建者或 in_charge,有没有办法做到这一点只影响last_updater?
  • 您需要将测试 AND users.id = tickets_users.users_id 添加到您的 CASE 语句中。
  • 一切正常,非常感谢您的帮助

标签: mysql join conditional-statements


【解决方案1】:
ON users.id IN (tickets_users.users_id, tickets.last_updater)

还有

您需要将测试 AND users.id = tickets_users.users_id 添加到 你的CASE 声明

工作,谢谢eggyal

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 2013-04-06
    • 1970-01-01
    • 2018-01-30
    • 2010-12-20
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    相关资源
    最近更新 更多