前提・実現したいこと
mySQLで2つのテーブルのあるカラムが一致したレコードを抽出したいのですが、うまくいきません。
テーブルAには主キーのvidに複数のkeyとvalueがあり、 テーブルBにはcidに複数のkeyとvalueがあります。(正規化がうまくできていませんが、この構造を前提にプログラムの質問をさせてください。)
テーブルBのkeyとvalueに合致するA.vidを抽出することが目的です。
下記のテーブルの状態であれば、vid=1002が抽出できればよいのですが、うまくできていません。
初心者につき、ご教授いただければ幸いです。よろしくお願いいたします。
[テーブルA]
vid key value
1001 1 aaa
1001 2 bbb
1001 3 ccc
1002 1 ddd
1002 2 eee
1002 3 fff
1003 1 ggg
1003 2 hhh
1003 3 iii
;
[テーブルB]
cid key value
2001 1 ddd
2001 2 eee
2001 3 fff
;
該当のソースコード
SELECT vid FROM A WHERE
((value=(SELECT value FROM B WHERE key=1)) AND key=1)) AND
((value=(SELECT value FROM B WHERE key=2)) AND key=2)) AND
((value=(SELECT value FROM B WHERE key=3)) AND key=3));
試したこと
WHERE節のAND条件をバラして個別に実行すると、vid=1002が出力されますので、AND条件の考え方が誤解しているように思います。
SELECT vid FROM A WHERE
((value=(SELECT value FROM B WHERE key=1)) AND key=1));
SELECT vid FROM A WHERE
((value=(SELECT value FROM B WHERE key=2)) AND key=2));
SELECT vid FROM A WHERE
((value=(SELECT value FROM B WHERE key=3)) AND key=3));
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー