Mysql 基于CASE的左连接

Mysql 基于CASE的左连接,mysql,sql,Mysql,Sql,我想在MySQL中做一个左连接。联接基于一个条件。例如,如果该值为328,请使用Left Join,否则请使用Left Join 以下是查询: SELECT * FROM applications app CASE WHEN app.application_type = 328 THEN LEFT JOIN application_individu ai ON app.id = ai.application_id ELSE LEFT JOIN appli

我想在MySQL中做一个左连接。联接基于一个条件。例如,如果该值为328,请使用Left Join,否则请使用Left Join

以下是查询:

SELECT * FROM applications app
CASE 
WHEN 
    app.application_type = 328 
THEN
    LEFT JOIN application_individu ai 
    ON app.id = ai.application_id 
ELSE
    LEFT JOIN application_org ao 
    ON app.id = ao.application_id 
END
WHERE app.id=11
我在phpmyadmin上收到错误消息

一,。我们可以使用join的CASE吗

二,。如果可能,如何以正确的方式进行

更新数据

下面是示例数据

应用程序

应用程序

应用程序组织

参数

这是我更新的查询,没有使用CASE

有没有办法检查应用程序是个人的还是公司的,这样我就不会重复join上的参数了。

您可以使用union

   SELECT app.* FROM applications app    
        LEFT JOIN application_individu ai 
        ON app.id = ai.application_id
    where app.application_type = 328 
union 
SELECT app.* FROM applications app    
       LEFT JOIN application_org ao 
       ON app.id = ao.application_id 
    where app.application_type != 328 
你可以用工会

   SELECT app.* FROM applications app    
        LEFT JOIN application_individu ai 
        ON app.id = ai.application_id
    where app.application_type = 328 
union 
SELECT app.* FROM applications app    
       LEFT JOIN application_org ao 
       ON app.id = ao.application_id 
    where app.application_type != 328 

您可以在下面尝试-在CLUSE中使用带应用条件的左连接

    SELECT * FROM applications app
    left join application_individu ai ON app.id = ai.application_id
    and app.application_type = 328 
    LEFT JOIN application_org ao ON app.id = ao.application_id 
    WHERE app.id=11

您可以在下面尝试-在CLUSE中使用带应用条件的左连接

    SELECT * FROM applications app
    left join application_individu ai ON app.id = ai.application_id
    and app.application_type = 328 
    LEFT JOIN application_org ao ON app.id = ao.application_id 
    WHERE app.id=11

你应该把逻辑放在ON子句中。并记住在选择中使用COALESCE:


引用多个表时不要使用SELECT*。至少,当列在不同的表中具有相同的名称时,会出现命名冲突,这种情况很可能发生。

您应该将逻辑放在ON子句中。并记住在选择中使用COALESCE:


引用多个表时不要使用SELECT*。至少,当列在不同的表中具有相同的名称时,会出现命名冲突,这在本例中很可能发生。

要有条件地连接表,只需在SQL中将它们外部连接即可。因此,结果行中要么有一个信息,要么有另一个信息。您将得到一个与您添加到请求中的查询类似的查询

在我看来,组合参数表没有意义。使用一个状态表和一个申请人类型表,这样您就可以应用适当的外键并知道哪个是哪个

查询将如下所示:

SELECT
  app.app_reference, created_date, s.status_text, apt.type_text,
  ai.name, ai.age,
  ao.companyName, ao.companyRegNo
FROM applications app
INNER JOIN status s ON s.id = app.status_id
INNER JOIN applicant_type apt on apt.id = app.applicant_type_id
LEFT JOIN application_individu ai ON app.id = ai.application_id
LEFT JOIN application_org ao ON app.id = ao.application_id;

有条件地连接表,只意味着在SQL中外部连接表。因此,结果行中要么有一个信息,要么有另一个信息。您将得到一个与您添加到请求中的查询类似的查询

在我看来,组合参数表没有意义。使用一个状态表和一个申请人类型表,这样您就可以应用适当的外键并知道哪个是哪个

查询将如下所示:

SELECT
  app.app_reference, created_date, s.status_text, apt.type_text,
  ai.name, ai.age,
  ao.companyName, ao.companyRegNo
FROM applications app
INNER JOIN status s ON s.id = app.status_id
INNER JOIN applicant_type apt on apt.id = app.applicant_type_id
LEFT JOIN application_individu ai ON app.id = ai.application_id
LEFT JOIN application_org ao ON app.id = ao.application_id;

共享示例数据和输出您需要对此类案例使用动态sql 1-不,您不能使用案例尝试搜索mysql Conditional join。sql查询将生成一个包含已知列的表。应用程序个人和应用程序组织是否有完全相同的列?如果是这样的话,那么为什么两个表而不是一个带有individu/org标志的表呢?或者您只对两个表中存在的某些列感兴趣?请出示样品数据和预期结果。感谢您的快速回复。稍后将更新我的问题。当前远离我的pcshare示例数据和输出您需要对此类案例使用动态sql 1-不,您不能使用案例尝试搜索mysql Conditional join。sql查询将生成一个包含已知列的表。应用程序个人和应用程序组织是否有完全相同的列?如果是这样的话,那么为什么两个表而不是一个带有individu/org标志的表呢?或者您只对两个表中存在的某些列感兴趣?请出示样品数据和预期结果。感谢您的快速回复。稍后将更新我的问题。目前远离我的电脑
   SELECT app.* FROM applications app    
        LEFT JOIN application_individu ai 
        ON app.id = ai.application_id
    where app.application_type = 328 
union 
SELECT app.* FROM applications app    
       LEFT JOIN application_org ao 
       ON app.id = ao.application_id 
    where app.application_type != 328 
    SELECT * FROM applications app
    left join application_individu ai ON app.id = ai.application_id
    and app.application_type = 328 
    LEFT JOIN application_org ao ON app.id = ao.application_id 
    WHERE app.id=11
SELECT a.*,
       COALESCE(ai.name, ao.name) as name
FROM applications a LEFT JOIN
     application_individu ai
     ON a.id = ai.application_id AND
        a.application_type = 328 LEFT JOIN     
    application_org ao 
    ON a.id = ao.application_id  AND
       a.id = 11;
SELECT
  app.app_reference, created_date, s.status_text, apt.type_text,
  ai.name, ai.age,
  ao.companyName, ao.companyRegNo
FROM applications app
INNER JOIN status s ON s.id = app.status_id
INNER JOIN applicant_type apt on apt.id = app.applicant_type_id
LEFT JOIN application_individu ai ON app.id = ai.application_id
LEFT JOIN application_org ao ON app.id = ao.application_id;