2013-03-13 3 views
1

Мне нужно получить некоторые данные из db MySQL. У меня есть функция, работающая с использованием двух отдельных простых запросов, но я уверен, что это возможно с одним запросом, используя JOIN. SQL не моя сильная сторона, и я продолжаю получать синтаксические ошибки, когда пытаюсь. Конечно, я мог бы оставить это как есть, почему бы и нет, это работает. Но я бы предпочел увидеть реальный пример того, как они могут быть объединены, поэтому я могу попробовать и применить его к другим запросам в будущем.MySQL объединяет меня, и я всегда получаю синтаксические ошибки.

Запрос один:

select manufacturers_id from products where products_name = product a 

Результат затем помещается в переменную и используется в

select manufacturers_name from manufacturers where manufacturers id = $man_id 

Таким образом, в основном, products таблица содержит manufacturers_id, что нам нужно собирать для данного продукта, чтобы узнать, что имя производителя от таблицы manufacturers. manufacturers_id является общим полем.

+0

Мне всегда нравился [наглядный пример объединений] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) – xQbert

ответ

1

Попробуйте это:

SELECT b.manufacturers_name 
FROM products a 
LEFT JOIN manufacturers b ON a.manufacturers_id = b.manufacturers_id 
WHERE a.products_name = 'PRODUCT NAME' 

Ниже приведена схема SQL Joins

SQL JOINS

Image Source

+1

Просьба указать атрибуцию источника изображения, если вы не являетесь его создателем. –

+0

Добавлен источник изображения –

+1

+1 для отличной диаграммы, которую вы предоставили, которая четко и просто показывает процесс соединения. Большое вам спасибо, огромная помощь. –

0

Я считаю, что это то, что вы ищете

SELECT manufacturers.manufacturers_name 
FROM products 
JOIN manufacturers on manufacturers_id=products.manufacturers_id 
WHERE manufacturers_name='product a' 

С присоединиться, вам просто нужно следовать этим синтаксисом, и помните, что вы должны установить совпадающие столбцы равны друг другу, так вы не 't заканчиваются недопустимыми строками.

Я покажу вам, как эквивалент этого с использованием таблицы объединяется, но я действительно не хочу поощрять использование этого синтаксиса даже случайно.

+0

Ваше решение также создает синтаксическую ошибку. # 1052 - Столбец «manufacturer_id» in on является неопределенным –

+0

трудно обойтись без ваших структур таблиц. Я предположил, что имя не было на первой таблице, так как вы выполняли соединение, чтобы получить его. SQL-код исправлен, но он все равно может выйти из строя, если имена таблиц/столбцов отключены. Мы не можем догадаться, что это такое, вы можете внести исправления. –

+0

Извинения, я должен был включить структуры таблицы в исходный вопрос. –

0

Попробуйте это:

select m.manufacturers_name from products p, manufacturers m 
where p.products_name = 'productA' and p.manufacturers_id = m.id 
Смежные вопросы