如何在MySQL查询中有条件地连接表

如何在MySQL查询中有条件地连接表,mysql,Mysql,嗨 我有三个表,即账户,公司和自由职业者。accounts表包含电子邮件、密码和帐户类型字段,其中if帐户类型值为枚举(“公司”、“自由职业者”)。我想知道,如果帐户类型字段等于公司,我如何编写一个与公司表关联的查询,如果您想将所有数据都放到一个表中,则应与自由职业者 您可以简单地使用联合来绑定从连接两个表中获得的两个结果集 SELECT * FROM users Accounts a LEFT JOIN Companies c ON c.account_id = a.id WHERE


我有三个表,即
账户
公司
自由职业者
。accounts表包含
电子邮件
密码
帐户类型
字段,其中if
帐户类型
值为
枚举(“公司”、“自由职业者”)
。我想知道,如果
帐户类型
字段等于
公司
,我如何编写一个与
公司
表关联的查询,如果您想将所有数据都放到一个表中,则应与
自由职业者

  • 您可以简单地使用
    联合
    来绑定从连接两个表中获得的两个结果集

     SELECT * FROM users Accounts a
     LEFT JOIN Companies c ON c.account_id = a.id  
     WHERE a.account_type = 'companies'
    
     UNION
    
     SELECT * FROM users Accounts a
     LEFT JOIN Freelancers f ON f.account_id = a.id 
     WHERE a.account_type = 'freelancers'
    
  • 通过将ID添加到一个表中,可以根据ID连接表

    SELECT
    Accounts .id,
    Accounts .type,
    Companies .account_id AS id2,
    Freelancers .account_id AS id3
    
    FROM Accounts 
    LEFT JOIN Companies ON Accounts .id = Companies .account_id AND Accounts .type = 'companies'
    LEFT JOIN Freelancers ON Freelancers .account_id = Accounts .id AND Accounts .type = 'freelancers'
    
  • 我希望这将帮助您解决您的问题。

    例如

    SELECT Accounts.column1, 
           COALESCE(Companies.column2, Freelancers.column3), -- common column
           Companies.column4,                                -- specific column
           Freelancers.column5                               -- specific column
    FROM Accounts
    LEFT JOIN Companies ON Companies.account_id = Accounts.id 
                       AND Accounts.account_type = 'companies'
    LEFT JOIN Freelancers ON Freelancers.account_id = Accounts.id 
                       AND Accounts.account_type = 'freelancers'
    

    我想你不能换桌子吧?因为如果可以,我会将公司和自由职业者的所有条目放在一个表中,并将account type enum列添加到该表中。然后,您可以使用此列简单地加入。这回答了你的问题吗?欢迎来到SO。请看