2016-10-17 10 views
2

Есть ли способ сделать выбор, чтобы сделать что-то вроде следующего без выполнения запросов на буксировку? Первый запрос, получающий «id», если столбец и вторая очередь очередей, возвращающихся туда, где находится этот «id»?SQL Select Where Join Table

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

Благодарим за ответы!

Просто быстрое графическое представление того, чего я пытаюсь достичь!

enter image description here

+0

Предложение 'join' должно предшествовать предложению' where'. Кроме этого, есть ли у вас другая проблема? – Mureinik

+0

Первый запрос? Второй запрос? Я вижу только * один * (искаженный) запрос. –

+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

Это именно то, что нужно. Спасибо. –