查询有时会给我重复

时间:2013-02-16 15:00:45

标签: sql

我的搜索选项存在此问题。 我的问题是,它给了我重复。并且它不可能,因为如果我按ID搜索它会给我两行,并且ID是唯一的。 这是我使用的查询:

SELECT forma.*, SMS_MONTIME.IDTICKET, SMS_MONTIME.MBYLLUR,SMS_MONTIME.time_added
FROM forma 
LEFT JOIN SMS_MONTIME ON forma.ID = SMS_MONTIME.IDTICKET where forma.$kategoria LIKE '%$search%' ORDER BY forma.ID 

我可以使用什么来避免重复?也许不会离开加入。

3 个答案:

答案 0 :(得分:2)

如果SMS_MONTIME表格中的一行多于IDTICKET等于单个forma.ID,则会发生这种情况。例如,如果forma表中只有一行ID等于10,则SMS_MONTIME中可能有两行IDTICKET等于{{ 1}}。然后在结果中得到两行,来自10表的重复信息和来自forma表的不同信息。

除非您重新考虑所需的结果,否则无法避免这种情况。怎么会破坏SMS_MONTIME表的信息?您可能需要使用单独的查询提取所需信息,或者您可以处理结果(带有重复项)以提取所需信息。

答案 1 :(得分:0)

你试过DISTINCT

吗?
SELECT DISTINCT column_name(s)
FROM table_name
Where <conidition>

检查this link

答案 2 :(得分:0)

正如我的评论中所提到的,如果您的SMS_MONTIME表中有多条记录,那么您将收到重复记录。如果您只想接收单个记录,则可以获得MAX(time_added)并显示该记录。这是一个例子:

SELECT forma.*, SMS_MONTIME.IDTICKET, SMS_MONTIME.MBYLLUR,SMS_MONTIME.time_added
FROM forma 
    LEFT JOIN (
        SELECT IDTICKET, MAX(time_added) max_time_added
        FROM SMS_MONTIME 
        GROUP BY SMS_MONTIME.IDTICKET
    ) SMS_MONTIME_MAX ON forma.ID = SMS_MONTIME_MAX.IDTICKET 
    LEFT JOIN SMS_MONTIME ON 
        forma.ID = SMS_MONTIME.IDTICKET AND SMS_MONTIME.time_added AND SMS_MONTIME_MAX.max_time_added
WHERE forma.$kategoria LIKE '%$search%' 
ORDER BY forma.ID 

希望这有帮助。