当前位置: 首页 > 知识库问答 >
问题:

值为0时的sql查询

裴宏壮
2023-03-14

以下是我的查询:

SELECT f.id AS id, 
       c.city AS city,
       ca.category AS cat 
FROM following AS f 
     JOIN cities AS c ON f.city=c.id 
     JOIN categories AS ca ON f.category=ca.id 
WHERE f.member = $this->id

问题是有时城市可以等于0。如果它们等于零,我就不能让他们加入城市或类别表,因为表中没有 0 的值,我也不需要一个值。

所以基本上我想要上面的查询,但我想要:如果city!=0 加入城市表,如果 cat!=0 加入类别表。

我不介意改变PHP或SQL,但我就是不知道如何实现这一点。

共有3个答案

尉迟安民
2023-03-14

在应用连接条件之前,使用 if 条件检查城市和猫的值:

SELECT f.id AS id, c.city AS city,ca.category AS cat 
FROM following AS f 
JOIN cities AS c ON if(f.city!=0,f.city=c.id,0=1)
JOIN categories AS ca ON if(ca.id!=0,f.category=ca.id,0=1)
弓嘉纳
2023-03-14

正确答案基于预期输出。

如果在城市或类别为零的情况下,您不想要< code >下面的表中的条目,那么您根本不需要费心。当您使用< code >内连接时,只有在找到具有给定城市ID或类别ID的记录时,它们才会从< code >下面的表中获取数据。

但是,如果您的要求是当cityclass值趋于0时需要显示空值,那么LEFT JOIN就可以了。

SELECT f.id AS id, 
  IF(c.city IS NULL, 'NO CITY', c.city) AS city,
  IF(ca.category IS NULL, 'NO CATEGORY', ca.category) AS cat 
FROM following AS f 
LEFT JOIN cities AS c ON (f.city=c.id) 
LEFT JOIN categories AS ca ON (f.category=ca.id)
WHERE f.member = $this->id
公羊浩气
2023-03-14

尝试在查询中使用LEFT JOIN

 类似资料:
  • 我在SQL Server2012中创建了以下存储过程... 它将显示类似于下面的输出... 我想让它做的是显示前几周的票数(今天和前6天),即使其中一些天没有门票进入。对他们来说只会显示0。因此,我的输出将看起来包含周四、周五、周六、周日、周一、周二、周三。

  • 问题内容: 我有以下查询,仅在它们为空时才在其中更新值。 是否可以将所有这些都放入单个查询中? 和 问题答案: 您可以尝试: 尽管它可能会触发更新触发器,即使对于实际上未更改的行也是如此。

  • 问题内容: 我有一个查询,计算两个日期之间所有项目的价格。这是select语句: 您可以假定所有表均已正确设置。 如果我在两个日期之间进行选择,并且在该日期范围内没有任何项目,则该函数返回NULL作为TotalPrice而不是0。 我如何确保如果找不到记录,则返回0而不是NULL? 问题答案: 大多数数据库服务器都有一个COALESCE函数,该函数将返回非空的第一个参数,因此下面的操作应该可以满足

  • 我怀疑我的SQL。 请找到查询 输出显示properly.currently我得到firstname和lastname。但对于某些条目,名和姓为空。我需要修改查询,以便我可以打印列的非空值if(last_id!=0和date(活动)=date(start_date),CONCAT(ag.firstname ,' ‘, ag.lastname ) ,’') 相同的查询,不包括名和姓的空条目。我尝试了

  • 我想在它从一个变化到另一个时返回值。 在下面的示例中,当他/她的成绩按examnum(从A到C)顺序下降(4是最近的考试)时,我想返回studentname、examnum和grade。要返回的行在Return列中突出显示(该表没有Return列)。 例如,我想给Tom,4,B看,因为他在考试3中得了A,但在下一次考试中他得了B(考试4)。 我甚至不知道从哪里开始。 从dbo.exam中选择Stu

  • 问题内容: 我想检查所有值(即对应于字典中所有键的值)是否为0。是否有没有循环的方法?如果可以,怎么办? 问题答案: 用途: 如果给定的iterable的所有元素都为true,则返回。