mysql - 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.firstname
and 。clients.lastname
如果clientbook.user_id
是0
,请选择clientbook.firstname
和clientbook.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
。
如何进行此查询?
解决方案
如果 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
推荐阅读
- regex - apache忽略url查询参数顺序重写
- python - pandas:从字典的逆映射创建一列
- php - 无法在数据库中上传照片
- asp.net-mvc-5 - 使用 EF 是否有一个内置过程来引用父级的父级?
- docker - 在 docker 容器中运行的服务调用在另一个 docker 容器中的另一个服务中运行的 Web 服务
- python - python的〜在使用布尔值时发生了什么?
- php - PHP 404 Not Found 标头在 Google Chrome 中显示为 404 ()
- tensorflow - 如何在回归模型中使用来自 Tensorflow 概率的 Gamma 函数作为对数似然损失
- ios - Find special characters entered in a textfield and escape in swift
- llvm - 编译器似乎没有找到类 llvm::Instruction 的成员函数