2

ここに複雑なものがありますか?(少なくとも私にとっては)。列が一意キーであるtickets、というテーブルがあります。idと呼ばれる別のテーブルがありますがLabels、これには(外観から)一意のキーがありません。Ticketsチケット情報(メッセージ、チケット作成者など)を保存します。チケットを作成するときにラベルを追加して、それらのラベルが付いたチケットを検索できるようにすることができます(例:「後で確認」)。

私がやろうとしているのは、逆のタイプのクエリです。たとえば、特定のラベルが関連付けられていないすべてのチケットを表示します。たとえば、「後で確認」のあるチケットは表示しないでください。チケットにラベルがない場合は、ラベルテーブルに何も入力されません。手作業で、またはクエリビルダーを使用して、自分が作成したどのタイプのクエリも機能させることができません。

私は私の画像ですTickets.id。174が表示されています。これもLabels.ticket_id 1742xラベルが設定されています。

クエリ、結合、実行、実行しないなど、どのようなクエリを実行しても、結果が返されなかったり、奇妙な理由でticket 174表示されたりします。

これが私が試した中で最も単純なクエリです...しかし、私はこれまでに単純なものから非常に複雑なものまで約30回の反復を試したと思います。

SELECT tickets.id
FROM
  tickets, labels_tickets
WHERE
  tickets.id <> labels_tickets.ticket_id
GROUP BY
  tickets.id

誰かがこれがうまくいかない理由を提案したり、次のようなステートメントを作成する方法を考えたりできますか?

「MyLabel」というラベルがないか、Labelsテーブルに値がまったくないチケットのすべてのtickets.idを表示します。

どうもありがとう!

4

3 に答える 3

2
    SELECT tickets.id 
    FROM 
      tickets 
    WHERE 
      tickets.id NOT IN (SELECT ticket_id from labels_tickets where labels_tickets.label = 'out of hours' or labels_tickets.label = null) 
    GROUP BY 
      tickets.id 

これを試してみてください。うまくいくと思います。

于 2012-10-08T17:35:32.303 に答える
0

を実行して、テーブルに何も見つからouter joinないチケットのみを選択できます。ticket_idlabels_tickets

SELECT t.id
FROM tickets t
LEFT OUTER JOIN labels_tickets l ON t.id = l.ticket_id
WHERE l.ticket_id IS NULL
GROUP BY t.id
HAVING sum(l.label = 'review later') = 0

このJOINの例を参照してください

于 2012-10-08T17:31:56.787 に答える
0

以下は、ReviewLaterラベルがないすべてのチケットを取得します。

SELECT lt.ticket_id
FROM labels_tickets
group by lt.ticket_id
having sum(case when label = 'ReviewLater' then 1 else 0 end) = 0

これにより、すべてのラベルがグループとして扱われます。合計は、目的のラベルを持つ数をカウントします。このカウントが0であるものが必要です。

このようなセットメンバーシップタイプのクエリには、group byとを使用することを強くお勧めします。havingタグの有無の任意の組み合わせに簡単に一般化できます。

于 2012-10-08T17:35:11.627 に答える