2

私が持っているのはこれらの2つのテーブルです: テーブル

1つのプレフィックスは、無制限の数のリンクで使用できます。がパラメータとしてテーブルidからの場合、リストを受け取っています。click_links

今の私の目標は、プレフィックスのリストを選択し、そのリスト内のリンクで使用されているプレフィックスをマークすることです。

私が試したこと:私の最善の試みはこれでした:

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、それが多くのリンクで使用されている場合の重複があるからです。

重複がなく、リスト内の少なくとも1つのリンクによって作成されているかどうかを示すマーク(必要に応じてフラグ)が付いたプレフィックスのリストを取得するにはどうすればよいですか?

編集 はこのクエリで終了しました:

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 に答える