从mysql结果中消除不需要的行

时间:2017-05-04 14:08:30

标签: mysql

我有一个MySQL结果(通过连接三个表获得),如下所示:

$project

(搜索为%fisherman%)
我通过搜索%like%results并比较两个表 - 文章表和标签表(带有关系表tagsrel)来获得这个。

我想删除相同article_id的无关行(请参阅第一列)。 我正在考虑用

做这件事

article_id | article_name | tag_id | tag | article_ref | tag_ref ----------------------------------------------------------------------------------- 00021 | Red jumper | 14 | fisherman | 00021 | 14 00023 | Fishermans knit| 13 | batwing | 00023 | 13 00023 | Fishermans knit| 14 | fisherman | 00023 | 14 00023 | Fishermans knit| 15 | rollneck | 00023 | 15 00025 | Green Guernsey | 14 | fisherman | 00025 | 14

可能是SELECT FROM (SELECT FROM /*original query */)?虽然行不是唯一的,但正如您所看到的那样。理想情况下,我想只选择带有该ID的第一个。所以我的结果将是:

DISTINCT

我的问题实际上是否可以应用(如上所述)另一个SELECT来消除所述行? 在此先感谢(我已经被困在这几天了!!!)

解决方案:根据Juan Carlos Oropeza的回答,添加别名以插入查询

  article_id |  article_name  | tag_id |    tag     | article_ref |  tag_ref
-----------------------------------------------------------------------------------
    00021    |   Red jumper   |   14   | fisherman  |    00021    |    14
    00023    | Fishermans knit|   13   |  batwing   |    00023    |    13       
    00025    | Green Guernsey |   14   | fisherman  |    00025    |    14   

1 个答案:

答案 0 :(得分:1)

使用变量选择每个user.roles[0].id

中的第一个

<强> SQL DEMO

article_id

<强>输出

enter image description here

ADITIONAL TIP:

SELECT *
FROM ( SELECT *,
              @rn := if(@article = `article_id`,
                        @rn + 1,
                        if(@article := `article_id`, 1, 1)
                       ) as rn
       FROM yourTable
       CROSS JOIN (SELECT @rn := 0, @article := '' ) as T
       ORDER BY `article_id`, tag_id 
     ) T
WHERE rn = 1
ORDER BY  `article_id`