当前位置: 首页 > 面试题库 >

MySQL JOIN-左表中的重复结果返回NULL

和和煦
2023-03-14
问题内容

我相信这是一件非常简单的事情,我发誓我以前做过,但是我不记得怎么做。

假设我有一对多的关系。我想加入两个表,但不允许左侧表重复。

SQLFIDDLE

因此,根据上述SQLFiddle,我的结果将是:

categories.title  |  items.NAME  |  items.category_id
-----------------------------------------------------
red               | apple        | 1
red               | car          | 1
red               | paper        | 1
yellow            | lego         | 2
yellow            | banana       | 2
blue              | pen          | 3

我希望它是:

categories.title  |  items.NAME  |  items.category_id
-----------------------------------------------------
red               | apple        | 1
NULL              | car          | 1
NULL              | paper        | 1
yellow            | lego         | 2
NULL              | banana       | 2
blue              | pen          | 3

我的理由是,通过这种方式,我可以轻松地遍历结果,而无需使用PHP进行任何进一步处理。


问题答案:

您可以将值替换为以下内容:

select 
  case when rownum = 1 then title else null end title,
  name,
  category_id
from
(
  SELECT c.title, 
    i.name, 
    i.category_id,
    @row:=(case when @prev=title and @precat=category_id 
           then @row else 0 end) + 1 as rownum,
    @prev:=title ptitle,
    @precat:=category_id pcat
  FROM items AS i
  INNER JOIN categories AS c 
    ON c.id = i.category_id
   order by i.category_id, c.title
) src
order by category_id, rownum

参见带有演示的SQL Fiddle

结果是:

|  TITLE |   NAME | CATEGORY_ID |
---------------------------------
|    red |  apple |           1 |
| (null) |    car |           1 |
| (null) |  paper |           1 |
| yellow |   lego |           2 |
| (null) | banana |           2 |
|   blue |    pen |           3 |


 类似资料:
  • 问题内容: 我在第一次调用它返回值但第二次返回null的地方遇到问题(这没有关闭结果集或sql连接) 当然,该代码很容易修复,可以避免第二次调用,但是我想理解的是为什么如果第一个未调用,则第二个返回null 问题答案: 从Javadoc: 为了获得最大的可移植性,应按从左到右的顺序读取每一行中的结果集列,并且每一列只能读取一次。 在后台,您正在消耗TCP流中的字节,因此不能两次检索相同的列值也就不

  • 我正在尝试使用废料并遇到一些问题。问题是我的脚本返回重复的结果。我正在尝试从父页面抓取URL,并按照每个单独的URL获取关联的日期。抓取每个嵌套的URL后,它似乎会再次从父页面输出URL列表。 下面是脚本: 下面是 json 输出: 重申一下,我很难从父页面输出一个url列表,从每个单独的嵌套URL输出一个相应的日期列表。我是scrapy和python的新手,所以希望有人能给我指出正确的方向。

  • 我试图用这个php脚本创建一个更改密码页面。我希望能够告诉用户他们是否输入了正确的用户名和密码,以便进行更改。当我检查行时,无论它是否返回行,我总是得到以下错误: 警告:mysqli_num_rows()要求参数1为mysqli_结果,给定布尔值 这是我的代码: 注意:我确实在手之前建立了一个连接,只是似乎没有必要在这里进行连接。此外,如果我输入了正确的信息,它将根据需要更改密码,但仍会显示错误消

  • 我已经在Python中通过,它们看起来都非常相似。为什么?如何随机化它们?

  • 我开始在JPA2.1中使用新的实体图特性来指定必须加载的惰性集合。考虑以下课程: 当我执行命名查询以获得实体图提示下的实体列表时,我会得到一个包含重复实体的集合。如何仅加载一次A实体。 我正在使用: 冬眠4.3.5

  • 我有一个有82,535行的表,其中65,087行按ID是唯一的。当我拉取整个结果集82,535并复制到Excel并删除重复项时,它显示有17,448个重复项。但是当我使用下面的查询时,我得到了不同的结果: 此查询返回值17364 我确定唯一的的数目是65,087