【问题标题】:IF using inner join MySql?如果使用内部连接 ​​MySql?
【发布时间】:2020-04-11 04:57:09
【问题描述】:

我如何建立一个关节来选择任一表

餐桌作业

Id    |    name    |   salary   |   company   |  type
1     |    php     |   17.850   |   5         |  1
2     |    mysql   |   4.500    |   89        |  2
2     |    nodejs  |   7.500    |   89        |  1

表公司

Id    |    name    |   Area     |   status   
1     |    Facebook|   Developer|   1
2     |    Google  |   Manager  |   1

候选表

Id    |    name         |   City     |   phone   
1     |    Alan Kout    |   Nevada   |   1 555 6666
2     |    Wagner Mom   |   L.A.     |   1 444 8965

我的查询 mysql、内部联接候选人或公司

如果type == 1 在表作业中INNER JOIN ON table company

如果type == 2 在表作业INNER JOIN ON table candidate

例子

SELECT * FROM table_jobs
IF(table_jobs.type == 1, INNER JOIN table_company, INNER JOIN table_candidate)

这可能吗?

【问题讨论】:

    标签: mysql sql inner-join


    【解决方案1】:

    使用left joincoalesce()

    SELECT tj.*,
           coalesce(co.name, ca.name) as name,
           . . . 
    FROM table_jobs tj LEFT JOIN
         table_company co
         ON co.id = tj.id and tj.type = 1 LEFT JOIN
         table_candidate ca
         ON ca.id = tj.id and tj.type = 2;
    

    【讨论】:

      【解决方案2】:

      如果您希望两个联接都在一个结果中,您可以使用 UNION 运算符

      SELECT *
      FROM table_jobs INNER JOIN table_company
      WHERE table_jobs.type=1
      UNION
      SELECT *
      FROM table_jobs INNER JOIN table_candidate
      WHERE table_jobs.type=2
      

      【讨论】:

      • table_candidatetable_company 具有不同的数据类型和数据。这个联合会抛出一个错误。
      • 取决于列的实际定义方式
      【解决方案3】:

      您可以使用LEFT JOIN 而不是INNER JOIN 来实现此目的:

      SELECT  *
        FROM  table_jobs tj
          LEFT JOIN table_company tco ON tj.type = 1 AND tco.id = tj.id
          LEFT JOIN table_candidate tca ON tj.type = 2 AND tca.id = tj.id
      

      这将连接到类型为 1 的 table_company 和类型为 2 的 table_candidate

      然后,您可以 SELECT 酌情从每个表中获取所需的任何列。

      【讨论】:

        猜你喜欢
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        • 2018-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        • 2017-07-07
        相关资源
        最近更新 更多