首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IFNULL with subquery的mysql语法

IFNULL with subquery的mysql语法
EN

Stack Overflow用户
提问于 2014-09-18 15:18:47
回答 2查看 2.9K关注 0票数 1

我想在IFNULL语句中使用子查询

代码语言:javascript
复制
SELECT t.col1
     , IFNULL(t.col2, (SELECT an.col_11
                       FROM another_table an
                       WHERE an.col1 = t.col5)) as alias_name
     , t.col3
FROM table t;

IFNULL语句中,第二个表达式应该是子查询。

请给我正确的语法我的实际查询是

代码语言:javascript
复制
SELECT u.username, up.gender, d.name, desg.name, 
IFNULL(up.creative_lead_id, 
    (SELECT au.username FROM auth_user au 
     WHERE au.id=up.creative_lead_id)) as creative_lead, up.image 
FROM user_profile up, department d, designation, auth_user 
WHERE up.department_id=d.id 
AND up.designation_id = desg.id up.auth_uesr_id = u.id;

由于IFNULL语句,此查询出现语法错误。

EN

回答 2

Stack Overflow用户

发布于 2014-09-18 15:22:08

您可以使用join重写查询,关联查询将对表中的每一行执行,这可能会影响性能

代码语言:javascript
复制
SELECT 
  t.col1,
  IFNULL(t.col2, an.col_11) AS alias_name,
  t.col3 
FROM
  `table` t 
  LEFT JOIN another_table an 
    ON an.col1 = t.col5 
票数 1
EN

Stack Overflow用户

发布于 2014-09-18 15:22:56

在这种情况下,不要使用子查询,而是尝试使用类似的查询(使用联合):

代码语言:javascript
复制
SELECT t.col1
    ,IFNULL(t.col2, an.col_11) AS alias_name
    ,t.col3
FROM your_table t
LEFT JOIN another_table an ON an.col1 = t.col5

在完整查询中,对IFNULL子句使用了两次up.creative_lead_id (一次作为第一个参数,然后在子查询中)。这没有任何意义,因为如果第一个参数是NULL,您的子查询将不会返回任何结果!

为了向您展示解决问题的原理,我刚刚将第一个参数替换为一个我称为up.creative_lead的虚构参数。这个虚构的列是存储在表user_profile中的创意lead的名称,如果此值为null,我将查找与creative_lead_id对应的用户的username

下面是完整的查询,它将通过上面提到的更正解决您的问题:

代码语言:javascript
复制
SELECT u.username
    ,up.gender
    ,d.name
    ,desg.name
    ,IFNULL(up.creative_lead, cl.username) AS creative_lead
    ,up.image
FROM user_profile up
INNER JOIN department d ON d.id = up.department_id
INNER JOIN designation desg ON desg.id = up.designation_id
INNER JOIN auth_user u ON u.id = up.auth_user_id
INNER JOIN auth_user cl ON cl.id = up.creative_lead_id

请注意,我更改了查询的语法,强烈建议您避免使用旧的连接语法(改为使用显式的 JOIN 子句)。

希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25906528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档