【问题标题】:JOIN different tables depending on condition [duplicate]根据条件加入不同的表[重复]
【发布时间】:2016-06-07 01:11:11
【问题描述】:

有一个聊天参与者表,data_chats_parties。在此表中,有两个字段 teammember 表示参与者是成员还是团队帐户。如果 team=0 则它是一个成员帐户。如果 team!=0 则为团队帐户。

如果是团队帐户,我需要从data_teams 表中获取name 列。否则,我需要从data_members 表中获取username 列。

显然这个查询不起作用,但这是我想要实现的。

SELECT data_chats_parties.*,data_teams.name,data_members.username
FROM data_chats_parties
  IF ( data_chats_parties.team!=0 THEN
    INNER JOIN data_teams ON data_teams.id=data_chats_parties.team ELSE
    INNER JOIN data_members ON data_members.id=data_chats_parties.member )
WHERE data_chats_parties.member!=1
GROUP BY data_chats_parties.id

WHERE data_chats_parties.member!=1 行只是说“获取不是我的参与者”。

这种方式可以实现吗?

【问题讨论】:

  • 对每个连接进行单独的查询,并将它们与UNION结合起来。

标签: php mysql sql join inner-join


【解决方案1】:

您需要使用 2 个不同的查询并执行 UNION ALL:

-- Get teams
SELECT
    dcp.*, dt.name
FROM data_chats_parties dcp
INNER JOIN data_teams dt
    ON dt.id = dt.team
WHERE
    dcp.member <> 1
    AND dcp.team <> 0

UNION ALL

-- Get members
SELECT
    dcp.*, dt.name
FROM data_chats_parties dcp
INNER JOIN data_members dm
    ON dt.id = dt.member
WHERE
    dcp.member <> 1
    AND dcp.team = 0

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 2020-07-14
    • 2021-06-23
    • 2013-03-24
    • 2019-03-19
    • 1970-01-01
    • 2022-01-01
    • 2016-04-12
    • 1970-01-01
    相关资源
    最近更新 更多