2017-01-12 18 views
0

swap_id = 13サブクエリでMySQL WHERE IN文を使用するには?

mysql> SELECT * FROM swaps_products; 

+----+---------+-----------+------------+-----------+---------------------+ 
| id | swap_id | holder_id | swap_to_id | product_id| added    | 
+----+---------+-----------+------------+-----------+---------------------+ 
| 1 |  9 |   3 |   0 |  32 | 2017-01-06 10:43:52 | 
| 2 |  11 |  13 |   0 |   3 | 2017-01-06 11:03:45 | 
| 3 |  11 |  13 |   0 |   4 | 2017-01-06 11:03:45 | 
| 4 |  11 |   3 |   0 |  32 | 2017-01-06 11:03:45 | 
| 5 |  11 |   3 |   0 |  31 | 2017-01-06 11:03:45 | 
| 6 |  11 |   3 |   0 |  30 | 2017-01-06 11:03:45 | 
| 7 |  12 |   3 |   0 |  32 | 2017-01-06 14:16:13 | 
| 8 |  12 |   3 |   0 |  31 | 2017-01-06 14:16:13 | 
| 9 |  12 |   2 |   0 |   2 | 2017-01-06 14:16:13 | 
| 10 |  12 |   2 |   0 |   1 | 2017-01-06 14:16:13 | 
| 11 |  13 |  13 |   3 |   3 | 2017-01-12 14:31:44 | 
| 12 |  13 |  13 |   3 |   4 | 2017-01-12 14:31:44 | 
| 13 |  13 |   3 |   13 |  32 | 2017-01-12 14:31:44 | 
| 14 |  13 |   3 |   13 |  31 | 2017-01-12 14:31:44 | 

テーブル関わる4つの製品がある - 3,4,31,32。私は、3,4,31,32製品のいずれかが招かれている他のすべてのスワップ(swap_idのリスト)を私に与えるクエリが必要です。私はこの

SELECT sp.swap_id as swap_id, sp.holder_id as holder_id 
    -> FROM swaps_products as sp 
    -> JOIN swaps as s 
    -> ON s.id=sp.swap_id 
    -> WHERE (sp.swap_id != 13) AND 
    -> (s.rejected IS NULL) AND 
    -> ((s.swapped IS NULL) OR (s.swapped2 IS NULL)) AND 
    -> (sp.product_id IN (3,4,31,32)); 

は、ザ・JOINを持って

は問題に重要ではありません。このクエリは機能しますが、問題は私がswap_idだけを知っていることです。だから私はこの試みた:

(sp.product_id IN (SELECT product_id FROM swaps_products WHERE swap_id = 13)); 

をが、エラーが発生しました:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN swaps as s 
ON s.id=sp.swap_id 
WHERE (sp.swap_id != 13) AND 
(s.rejected IS N' at line 2 

私はこの問題は、サブクエリがINステートメントから期待されている配列を返していないということだと思います。

+0

質問をエラーメッセージ –

答えて

0

INステートメントでは、結果をチェックする値の単一列のベクトルにする必要があります。

直接お問い合わせにお答えするには:上記のエラーメッセージに基づいて、さらに

select * from swaps_products where product_id in (SELECT product_id FROM swaps_products where swap_id = 13) and swap_id != 13

を、あなたが遭遇した構文エラーがライン2を指しています。私はあなたのwhere...inクエリにFROM swaps_products as spの部分を残してしまったと思われます。

+0

で更新しました。FROM部分を削除しました。 –

+0

私たちの最高の起こる:)幸せなコーディング! –

0
SELECT DISTINCT y.* 
      FROM swaps_products x 
      JOIN swaps_products y 
      ON y.product_id = x.product_id 
      AND y.swap_id <> 13 
      WHERE x.swap_id = 13; 
関連する問題