Mysql 基于CASE的左连接
我想在MySQL中做一个左连接。联接基于一个条件。例如,如果该值为328,请使用Left Join,否则请使用Left Join 以下是查询: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
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;