将SQL查询组合在一起

问题描述

我正在尝试简化当前的查询代码。是否有一种将两个查询合并为一个更简单的方法

这是到目前为止我尝试过的。虽然看起来确实很凌乱和笨拙。该查询请求所有客户端

SELECT * FROM clients ORDER BY name DESC

然后我有一个请求来查找客户是否有预订

SELECT * FROM bookings WHERE client_id=$client_id AND done=0

完成表示作业是否完成,每个客户一次只能有1个未完成的作业。

说明:

代码需要显示所有客户,并且如果该客户有一个预订,并且如果另一个数据库返回了一个结果,那么如果没有结果(即该客户以前的所有预订均为1),则不会显示预订按钮。出现一个书本按钮。

解决方法

如果您只想要一个标志,则可以使用EXISTS

SELECT c.*,(EXISTS (SELECT 1
                FROM bookings b
                WHERE ON c.client_id = b.client_id AND b.done = 0
               )
       ) as has_booking
FROM clients c ;
,

我想你想要

select c.*,coalesce(b.done,1) completed
from clients c
left join bookings b on b.client_id = c.client_id and b.done = 0

这会尝试在booking中为每个客户端找到未完成的行。如果客户端有未完成的行,则结果集中的列completed包含0,否则为1

,
SELECT clients.*,bookings.done
FROM clients
LEFT JOIN bookings ON bookings.client_id = clients.client_id
AND b.done = 0

有了以上结果,您可以在视图中添加条件

if(done == 0){
     show button code
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...