0

レコードのあるテーブルがあります

id_queue | user_id | id_book | 状態
   69 | 5 | 4 | 1
   133 | 3 | 4 | 2
   142 | 1 | 4 | 0

この結果が得られるクエリが必要です

id_queue | id_queue
   69 | 142    
   133 | ヌル 

私はこのようなことを試しました

SELECT s1.`id_queue`、s2.`id_queue` FROM `second` as s1
LEFT JOIN `second` as s2 ON s2.`book_id` = 4 AND s2.`status` IN(0)
WHERE s1.`book_id` = 4 AND s1.`status` IN(1,2,4)

しかし、それは私にこの結果をもたらし続けます。

id_queue | id_queue
   69 | 142    
   133 | 142

条件が違うからだと思います。私に何ができる?

4

2 に答える 2

0

問題はbook_id、ステータスではなく参加しているため、常に一致する行があることです。

2番目のインスタンスを非表示にする場合は、id_queueユーザー定義変数を使用できます。

select Queue1,
  case when seq = 1 then queue2 else null end Queue2
from
(
  select 
    Queue1,
    Queue2,
    @row:=(case when @prev=Queue2 then @row else 0 end) +1 as Seq,
    @prev:=Queue2 
  from
  (
    SELECT 
      s1.`id_queue` Queue1,
      s2.`id_queue` Queue2
    FROM `second` as s1
    LEFT JOIN `second` as s2 
      ON s1.`id_book` = s2.`id_book`
      AND s2.`status` = 0
    WHERE s1.`id_book`=4 
      AND s1.`status` IN (1,2,4)
  ) src, (SELECT @row:=0, @prev:=null) r
  order by Queue1, Queue2
) s1
order by Queue1, Queue2

SQL FiddlewithDemoを参照してください

結果は次のとおりです。

| QUEUE1 | QUEUE2 |
-------------------
|     69 |    142 |
|    133 | (null) |
于 2013-02-06T13:09:11.373 に答える
0

これは、同じ列の複数の値を複数の列に設定しているために発生すると思います...このようにすると、複数の行のように見える可能性があります。

また、selectの直後に「DISTINCT」コマンドを入力しても、行のすべての列が別の列と同じであるかどうかがチェックされるため、値が消えることはないようです。

ただし、繰り返したくない値の直前にDISTINCTを配置して、機能するかどうかを確認することができます。

もっとお手伝いできたらいいのに。

例:

    SELECT s1.`id_queue`, DISTINCT (s2.`id_queue`)
    FROM `second` as s1
    LEFT JOIN `second` as s2 ON s2.`book_id`=4 AND s2.`status` IN (0)
    WHERE s1.`book_id`=4 AND s1.`status` IN (1,2,4) 
于 2013-02-06T12:37:11.253 に答える