2

我得到的是这两张桌子: 表

一个前缀可以被无限数量的链接使用。我收到了一个列表 if id's from click_linkstable 作为参数。

现在我的目标是选择一个前缀列表并标记那些被该列表中的链接使用的前缀。

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

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如果它被许多链接使用,就会有重复。

我怎样才能得到一个没有重复的前缀列表,并带有一个标记(如果你愿意,可以标记)显示它是否被列表中的至少一个链接所使用?

编辑 以这个查询结束:

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;
4

1 回答 1

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;
于 2012-07-26T09:31:25.700 回答