繁体   English   中英

我的SQL查询以获取唯一记录

[英]My SQL query to fetch unique records

我的表名称是菜单列表,如下所示。

 Health_interest_id   menu_id
    -------------------  -------
    4                     4
    4                     10
    5                     10
    2                     4
    2                     10
    2                     15
    2                     16
    1                     4

现在,我只想得到结果,如果以前没有得到同样的结果。

例如,在第一行中,我们可以看到health_id = 4,menu_id = 4。 所以那行应该被拿走,

然后在第二行中,我们可以看到health_id = 4,它已经在上一行中存在,因此跳过该行,

与第三行相同,menu_id = 10(在上面的内容中可用),因此跳过该行,然后继续所有行。 表示如果结果之前跳过。

嗯。 如果只需要两列中的不同值,则可以执行以下操作:

select Health_interest_id as menu_id from menulist
union
select menu_id from menulist;

这样可以完成您想要的吗?

您确实真的应该将这种逻辑从数据库引擎中移出,因为它并非旨在进行上下文感知的选择。 您正在打破关系数据的概念。 话虽这么说,但这是一个解决方案,任何人都不会出于任何原因使用它。 我应该被解雇,并取消学位,并仅出于编写目的而禁止其stackoverflow。 但我认为看它很有趣。 你不敢使用它;)。

SELECT Health_interest_id, menu_id from 
(
    SELECT 
        t2.*,
        @s:=CASE WHEN @t <> "" AND @u <> "" THEN CONCAT(@s,@t,@u) ELSE @s END,
        @t:=CASE WHEN LOCATE(CONCAT("|", Health_interest_id, "|"),@s) = 0 THEN CONCAT(Health_interest_id, "|") else "" END as AisNew,
        @u:=CASE WHEN LOCATE(CONCAT("|", menu_id, "|"),@s) = 0 THEN CONCAT(menu_id, "|") else "" END as BisNew
    FROM 
       Temp.t2 as t2,
       ( Select @s:="|" ) as s,
       ( Select @t:="" ) as t,
       ( Select @u:="" ) as u 
) AS INNER_TAB
WHERE AisNew <> "" And BisNew <> "";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM