通过CASE语句选择多个值?

ano*_*ery 7 mysql

我有一个Vehicle表,其中包含Owner_ID字段.此Owner_ID将对应Customer表中的ID字段或Business表中的ID字段.我希望根据ID所属的表返回不同的值.

我有这样的声明:

SELECT v.Make, v.Model
FROM Vehicle v
LEFT JOIN Customer c ON c.ID = v.Owner_ID
LEFT JOIN Business b ON b.ID = v.Owner_ID
Run Code Online (Sandbox Code Playgroud)

因此,如果Owner_ID = Customer.ID,我想返回客户姓氏,如果Owner_ID = Business_ID,则返回业务名称.我知道我可以CASE这样说:

SELECT v.Make, v.Model,
    CASE WHEN c.ID IS NOT NULL THEN c.Surname
        WHEN b.ID IS NOT NULL THEN b.Name
Run Code Online (Sandbox Code Playgroud)

但有没有办法从一个案例陈述中获得多个值?类似的东西:(顺便说一句,我知道这是完全错误的.)

SELECT v.Make, v.Model,
    CASE WHEN c.ID IS NOT NULL THEN
            SELECT c.Surname, c.Date_Of_Birth
        WHEN b.ID IS NOT NULL THEN
            SELECT b.Name, b.Founded
Run Code Online (Sandbox Code Playgroud)

或者我必须这样做:

SELECT v.Make, v.Model,
    CASE WHEN c.ID IS NOT NULL THEN c.Surname
        WHEN b.ID IS NOT NULL THEN b.Name
    END AS "Name",
    CASE WHEN c.ID IS NOT NULL THEN c.Date_Of_Birth
        WHEN b.ID IS NOT NULL THEN b.Founded
    END AS "DOB/Founded"
Run Code Online (Sandbox Code Playgroud)

Mar*_*ith 2

不,没有办法让case表达式的分支跨越多个列。

在你的例子中你可以这样做

SELECT v.Make,
       v.Model,
       MAX(COALESCE(c.Surname, b.name)) as name
FROM   Vehicle v
       LEFT JOIN Customer c
         ON c.ID = v.Owner_ID
       LEFT JOIN Business b
         ON b.ID = v.Owner_ID
GROUP  BY v.Owner_ID 
Run Code Online (Sandbox Code Playgroud)