2016-09-29 11 views
0

こんにちは私はこのようなテーブルAの私のフィールドkの他のテーブルの主キーのリストを持っている:選択したレコード

id=1 and ref=2 and fun=1 
    id=1 and ref=5 and fun=2 
    id=2 and ref=1 and fun=1 

をし、私はそれが主キーがIDですだテーブルBを持っています、 REF、もちろん楽しい

今私は、主キーが テーブルの値と一致して、テーブルBからすべてのレコードを選択したい、

select * from B where A.k 

.. WOR KS が、一つ一つのレコードが、私はテーブルA

でA.kに一致するテーブルBからすべてのレコードの選択をお願い

を選択し得るが、事前にあなたに感謝します。

+0

上のMySQLのマニュアルを参照してください。 – Barmar

+0

A.kkの内容が 'id = 1、ref = 2 and fun = 1'のような文字列の場合、Bから何かを選択できます。akの値は上記の文字列です –

答えて

0

MySQLはA.kの値を再評価する式として扱いません.SQLに代入されず、再帰的に実行されます。 WHERE A.kを記述すると、k列の内容が真または偽であるかどうかがテストされます。

すべての値を1つの列に入れるべきではありません。あなたは、あなたがテーブルを結合することができ、idのための個別の列を持っているref、および表Aにfun必要があります。

SELECT B.* 
FROM B 
JOIN A ON B.id = A.id AND B.ref = A.ref AND B.fun = A.fun 

あなたが本当にテーブルの列にSQL式を持っているしたい場合は、ダイナミックに作成する必要がありますストアドプロシージャ内のSQL。

SET @where = (SELECT GROUP_CONCAT(CONCAT('(', k, ')') SEPARATOR ' OR ') 
       FROM A); 
PREPARE stmt FROM CONCAT('SELECT * FROM B WHERE ', @where); 
EXECUTE stmt; 

は、MySQLが評価する式として文字列を解釈しませんPrepared Statements

+0

それは男、ありがとう –

関連する問題