2012-07-26 38 views
2

我所得到的是这两个表: tables加入两个表没有重复,并用标记

一个前缀可以通过无限数量的链接中。我是从click_links表接收如果id的列表作为一个paramater。

现在我的目标是选择前缀列表,并以纪念那些被该链接列表中。

我试过什么:我最好的尝试是这样的:

select p.id, p.contents, c.id, 
    case 
    when (c.id in (544,545...)) 
     then 1 
     else 0 
    end as isused 
from prefixes p 
join click_links c on c.prefix_id = p.id 

,但是这不是那么好,“如果它是由许多环节的原因也有prefix重复。

我怎样才能前缀没有重复,并表示是否正通过列表中的链接至少一个ISED一个标记(如果你想旗)名单?

编辑 与此查询结束:

SELECT distinct(p.id), p.contents, 
     IF(c.id IS NOT NULL, 1, 0) AS isused 
FROM prefixes p 
    LEFT JOIN (SELECT DISTINCT (prefix_id), id 
       FROM click_links WHERE id IN(544, 545...) 
       )c 
     ON c.prefix_id = p.id; 

回答

2

我认为这是你在找什么,试试吧:

SELECT p.id, p.contents, c.id, 
     IF(c.id IS NOT NULL, 1, 0) AS isused 
FROM prefixes p 
    LEFT JOIN (SELECT DISTINCT id 
       FROM click_links WHERE id IN(544,545...) 
       )c 
     ON c.prefix_id = p.id; 
+0

这是接近完美=),但有一个错误:这:'SELECT DISTINCT(prefix_id),id'起作用。但是...在此'(544545 ...)'名单scecified我有许多行。 – k102 2012-07-26 09:40:37

+0

稍微修改您的解决方案,它在我的编辑 – k102 2012-07-26 10:17:54