2016-10-17 21 views
2

トウクエリを実行せずにselectを実行して次のようなことを行う方法はありますか?最初のクエリは、 "id"を取得する列と2番目のテーブルを別のテーブルを返すその "id"が一致するか?SQL Select Where Where Join Table

SELECT `name` 
FROM `attributes` 
INNER JOIN `attribute_vals` 
ON `attributes`.`id`=`attribute_vals`.`attr_id` 
WHERE `name`='weight' 

ありがとうございました!

私が達成しようとしているものを簡単にグラフィカルに表現!あなたのDBの設計に関するいくつかの仮定を作る

enter image description here

+0

'join'節は' where'節の前に来なければなりません。それ以外に、別の問題がありますか? – Mureinik

+0

最初のクエリですか? 2番目のクエリ?私は* *(不正な形式の)クエリしか見ません。 –

+0

これは文法エラー –

答えて

1

  1. name列がattributesテーブルにある、
  2. attr_id, name組み合わせがユニークで、かつ
  3. valの列がありますattribute_valsテーブルにあります。

属性テーブルの名前で値テーブルを制限する単純な結合が必要なように思えます。

これで、関連付けられたattribute_valsデータを単一のクエリで取得できます。

SELECT 
    `av`.`id`, 
    `av`.`attribute_id`, 
    `av`.`value` 
FROM `attributes` AS `a` 
INNER JOIN `attribute_vals` AS `av` 
    ON `a`.`id`=`av`.`attr_id` 
WHERE `a`.`name`= 'weight' 
0

このクエリは、属性 'weight'のすべての属性値を取得します。これは、あなたの望むことですか?

select * 
from attribute_vals 
where attribute_id in (select id from attributes where name= 'weight'); 
+0

これはまさに必要なものです。ありがとうございました。 –