2017-01-18 7 views
1

キーと値を格納するテーブルからメタデータを抽出する必要があるので、最初に特定のキーを選択してSELECTクエリを作成します私は別のクエリはIDを維持し、別のデータ型(key_b)を狙って作るkey_a)、そして、次は私が持っているコードを簡略化したものである:SQL - 値を選択せず​​に同じテーブルのネストされた選択クエリに値を渡す

SELECT 
    id AS param, 
    val as key_a, 
    (
     SELECT val 
     FROM table 
     WHERE key = 'key_b' AND id = param 
    ) AS key_b 

FROM table 

WHERE val = 'key_a' 

私が欲しいものSELECTクエリせずにこれを達成することですidフィールドを選択します。 id AS param,行を削除して、paramidまたはtable.idに置き換えようとすると、これまでのところ機能しませんでした。私はちょっと迷っています。なぜなら、ネストされたクエリを扱うのは初めてで、同じテーブルネストされたクエリに関しては何も見つけることができないからです。

何か間違っていますか?

+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-veryを参照してください。 -simple-sql-query – Strawberry

+0

これは単なる構文の質問です。ちょっとした名前の難読化と表の記述の欠落は誰にも悪影響を与えません。私は一般的な名前が将来の読者にとっては良いと思っていましたが、ああ... – TheCamps10

+0

これを除いて、あなたはこの問題を解決するための良い(それは私が '効率的な'という意味の)方法であるという印象を消してしまいました。だから、あなたも失う。 – Strawberry

答えて

2

あなたの問題は、idとそれ自身を比較しなければならないということです。次に、列の代わりに表名のエイリアスを実行します。

SELECT 
    val as key_a, 
    (
     SELECT val 
     FROM table b 
     WHERE key = 'key_b' AND id = a.id 
    ) AS key_b 
FROM table a 
WHERE val = 'key_a' 
+0

ありがとう、それはそれを修正しました。私はあなたがテーブルの別名を付けることができるか分からなかった。それは素晴らしいです。 – TheCamps10

+0

まあ、それはたくさんの入力を安全にします:)あなたは大歓迎です... – fancyPants

0
SELECT DISTINCT A.id as param, 
    (SELECT B.val from table B where B.id = A.id and B.key = 'key_a'), 
    (SELECT C.val from table C where C.id = A.id and C.key = 'key_b') 
from table A 

私はあなたがしたいのかわからないんだけど、参加を使用し、これはあなたの問題を解決する

1

を願っています。テーブルが同じテーブルの場合は、自己結合を使用します。

SELECT 
    a.val as key_a, 
    b.val AS key_b 
FROM table a 
LEFT JOIN table b ON b.id = a.id AND b.key = 'key_b' 
WHERE a.val = 'key_a' -- perhaps you meant a.key here? 
; 
関連する問題