Sql 多个类别中的项目显示多次

Sql 多个类别中的项目显示多次,sql,Sql,我在一个“装备”表中有一些项目,它们使用连接表链接到equipcat表。问题是,我想得到一个所有项目的列表,其中用户提供的搜索词位于众多字段中的一个字段中,包括equipcat(又名category description)字段。但是我希望每个项目只列出一次。 看来我一定对SQL有一些基本的误解,因为我以前遇到过这个问题,并且很难弄清楚它。我不仅希望解决这个特殊的问题,也希望更好地理解它,以满足未来的需要 这是我的SQL。请忽略模糊搜索,因为我意识到它们不能很好地扩展/执行。我也知道,我使用一个

我在一个“装备”表中有一些项目,它们使用连接表链接到equipcat表。问题是,我想得到一个所有项目的列表,其中用户提供的搜索词位于众多字段中的一个字段中,包括equipcat(又名category description)字段。但是我希望每个项目只列出一次。

看来我一定对SQL有一些基本的误解,因为我以前遇到过这个问题,并且很难弄清楚它。我不仅希望解决这个特殊的问题,也希望更好地理解它,以满足未来的需要

这是我的SQL。请忽略模糊搜索,因为我意识到它们不能很好地扩展/执行。我也知道,我使用一个字段来保存关键字违反了良好的设计,我只是要求你忽略这一点,除非你觉得这对我要问的问题很重要

SELECT equip.equipid, equip.equipdesc, equip.equipgeneraldesc, 
    equip.keywords, equip.dayprice, equip.weekprice, 
    equip.monthprice, equip.hideyn, equipcat.equipcat, 
    equipcat.equipcatkeywords 
FROM (equip INNER JOIN equip_equipcat ON equip.equipid = equip_equipcat.equipid)
INNER JOIN equipcat ON equip_equipcat.equipcatid = equipcat.equipcatid
WHERE (equip.equipdesc LIKE '%rake%' OR equip.keywords LIKE '%rake%' OR 
    equipcat.equipcat LIKE '%rake%' OR equipcat.equipcatkeywords LIKE '%rake%') 
    AND (equip.hideyn = 0)
ORDER BY equipdesc ASC;
A) 您在结果中包含了equipcat表中的字段,因此每个类别都需要一行=>从查询中删除这些列


B) 然后,您可以在查询中添加一个独特的关键字(即选择独特的…),并将多行减少为唯一不同的行。

Howard,我不确定我是否理解a。您说“equiptab”时指的是什么表?@HK1抱歉,这是一个打字错误。编辑了我的答案。我的意思是equipcat.equipcat,equipcat.equipcat.Howard,您的回答恰好正确,我需要这个查询,但它确实假设我在演示文稿中没有使用equipcat表的字段。@HK1您能解释一下当多个类别匹配时,equip的输出应该是什么样子吗?在这种情况下,一行是不够的。还是应该只显示其中一个?哪一个?为了让你的建议起作用,我不得不把Equipment.*改成just.*并且把ee.Equipmcatid改成ec.Equipmcatid。而且,我相信,第一个和你有关系的人应该是一个手术室。我试图返回的记录可能只包括类别中的“rake”。事实上,在进一步测试后,我认为我需要保留您的原始记录和条件,因为当我将其更改为或时,确实会得到错误的结果。
SELECT  equip.*
FROM    equip e
WHERE   equipid IN
        (
        SELECT  equipid
        FROM    equip_equipcat ec
        JOIN    equipcat c
        ON      c.equipcatid = ee.equipcatid
        WHERE   equipcat LIKE '%rake%' 
                OR
                equipcatkeywords LIKE '%rake%'
        )
        AND
        (
        equipdesc LIKE '%rake%'
        OR
        keywords LIKE '%rake%'
        )
        AND hideyn  = 0
ORDER BY
        equipdesc