1

トリッキーな mysql select ステートメントを機能させようとしています - そして、燃えているノギンを冷やすために助けが必要です...そして、そこにいる MYSQL ヒーローの 1 人がこれを見て、それを巻き戻すと感じています。

目標: 特定のカテゴリに属さない特定のユーザーの曲を一覧表示する。

3 つのテーブル: : テーブル 1: 曲、UserID が割り当てられた多くのフィールド、および一意の SongID

表 2: カテゴリ、3 つ以上のフィールド、割り当てられた UserID と一意の CatID

表 3: リンカ、1 つまたは複数のカテゴリに曲をリストするための 1 対多。3 つのフィールド、一意の ID (インデックス)、SongID、CatID

以下は私を近づけます-しかし、他のカテゴリにまったく割り当てられていない、またはすでに別のカテゴリに割り当てられているユーザーの曲をリストしません(!=のおかげだと思います)。

SELECT DISTINCT song.SongName, song.UserID, song.SongID  FROM song  
JOIN linker ON song.SongID = linker.SongID 
WHERE  linker.CatID != 155 AND song.UserID =2

次に、これを試してみました。

SELECT DISTINCT song.SongName, song.UserID, song.SongID FROM song 
LEFT JOIN linker ON song.SongID = linker.SongID 
WHERE (linker.SongID IS NULL OR linker.CatID != 155) AND song.UserID =2 

より近くなりますが、機能しません (既に割り当てられている曲を含む != のおかげです)。

特定のユーザーのカテゴリを追加して定義するだけなので、テーブル 2 を呼び出さなくても済むと思っていました。または、すべてのユーザーの曲を取得してから、特定の CatID で配列値の設定を解除することを考えていますが、これは必要ではないようです。シンプルなものが欠けているような気がしますか?絶対に変更する必要がある場合、テーブル構造は現時点では神聖ではありません。考えを共有してくれた人に感謝します。

4

2 に答える 2

0
SELECT DISTINCT song.SongName, song.UserID, song.SongID 
  FROM song 
  LEFT JOIN linker 
    ON song.SongID = linker.SongID 
   and linker.CatID != 155 
   AND song.UserID = 2
于 2013-09-23T17:20:32.217 に答える