首页 > 解决方案 > SQL - 从表中选择,如果 user_id 为 0 从不同的表中选择

问题描述

我目前正在努力处理 SQL 查询,我有 2 个表,clients并且clientbook.


上下文

clientbook始终存在客户端条目的表

id | firstname | lastname | user_id | saloon_id
-----------------------------------------------
1    lorem       ipsum      5         10
2    jack        inthebox   0         10

clients根据客户在预订时是否登录,可能有也可能没有条目。如果clientbook.user_id为 0,则客户端将不在clients表中。clients看起来像这样:

user_id | firstname | lastname
------------------------------
5         lorem       ipsum   

问题

我想进行以下查询:

如果clientbook.user_id不是,则从那里0查询clients并选择clients.firstnameand 。clients.lastname

如果clientbook.user_id0,请选择clientbook.firstnameclientbook.lastname


我目前拥有的

我有这个查询:

    SELECT 
        c.firstname,
        c.lastname
    FROM
        clients AS c
    INNER JOIN
        clientbook AS cb
    ON
        c.id = cb.user_id
    WHERE
        c.firstname LIKE CONCAT("%", 'lorem', "%")
    AND
        cb.saloon_id = 10

但是,这只会clients在存在行的情况下进行选择。如果不存在行,则不会从 中选择clientbook

如何进行此查询?

标签: mysqlsql

解决方案


如果 clientbook.user_id 不为 0,则查询客户端并从那里选择 clients.firstname 和 clients.lastname。

如果 clientbook.user_id 为 0,则选择 clientbook.firstname 和 clientbook.lastname。

根据这个描述,你想要一个left join

select coalesce(c.firstname, cb.firstname) as firstname,
       coalesce(c.lastname, cb.lastname) as lastname
from clientbook cb left join
     clients c
     on cb.user_id = c.user_id

推荐阅读