Нужно ли мне присоединиться? - PullRequest
1 голос
/ 15 февраля 2012

У меня есть 3 таблицы: products, products_description, products_to_categories

Вот мой sql:

SELECT `products`.`products_model`, 
       `products_description`.`products_name` 
FROM   products, 
       products_description, 
       products_to_categories 
WHERE  `products`.`products_id` = `products_description`.`products_id` = 
                                         `products_to_categories`. `products_id` 
       AND `products_to_categories`.`categories_id` <> '91' 
ORDER  BY `products`.`products_model` DESC 

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

Ответы [ 6 ]

2 голосов
/ 15 февраля 2012

Вы можете сделать это с помощью JOIN, но если вы хотите использовать оператор Where, это нормально, но вам придется использовать AND , чтобы это произошло

SELECT `products`.`products_model`, `products_description`.`products_name`
FROM products, products_description, products_to_categories
WHERE `products`.`products_id` =  `products_description`.`products_id` 
   AND `products`.`products_id`= `products_to_categories`.`products_id` 
   AND `products_to_categories`.`categories_id` <> '91' 
ORDER BY `products`.`products_model` DESC
1 голос
/ 15 февраля 2012
select p.`products_model`,
    pd.`products_name`
from products p
inner join products_description pd on p.`products_id` = pd.`products_id`
inner join products_to_categories pc on p.`products_id` = pc.`products_id`
where pc.`categories_id` <> '91'
order by p.`products_model` desc
0 голосов
/ 15 февраля 2012
    SELECT `products`.`products_model`, `products_description`.`products_name`

ИЗ продуктов, описания продуктов, продуктов по категориям ГДЕ products. products_id = products_description. products_id И products_to_categories. products_id = products. products_id И products_description. products_id = products_to_categories. products_id products_to_categories. products_id И products_to_categories. categories_id <> '91' ЗАКАЗАТЬ НА products. products_model DESC

попробуйте это, я думаю, что это работает лучше, чем ваш запрос

0 голосов
/ 15 февраля 2012

Старайтесь не использовать запятые в предложении FROM. Это воздержание от более старой версии стандарта SQL, и больше не считается хорошей практикой. Практически везде, где вы используете синтаксис TableA,TableB, сейчас вы должны научиться использовать TableA INNER JOIN TableB ON.

В этом случае, однако, вы можете сойти с рук так:

SELECT `products`.`products_model`, `products_description`.`products_name`
FROM products, products_description, products_to_categories
WHERE `products`.`products_id` =  `products_description`.`products_id` 
    AND `products`.`products_id` = `products_to_categories`. `products_id` 
    AND `products_to_categories`.`categories_id` <> '91' 
ORDER BY `products`.`products_model` DESC

Но опять же, вы действительно должны научиться писать так:

SELECT `products`.`products_model`, `products_description`.`products_name`
FROM products
INNER JOIN products_description ON products.products_id = `products_description`.`products_id`
INNER JOIN `products_to_categories` ON `products_to_categories`.`products_id` = `products`.`products_id`
WHERE `products_to_categories`.`categories_id` <> '91' 
ORDER BY `products`.`products_model` DESC
0 голосов
/ 15 февраля 2012

Более современный JOIN обычно в любом случае предпочтительнее старого неявного синтаксиса соединения. Он представляет гораздо более удобочитаемую картину того, как связаны таблицы, и позволяет получить более четкое предложение WHERE, включив только фактическое условие ограничения в WHERE.

SELECT 
  `products`.`products_model`,
  `products_description`.`products_name`
FROM 
  products
  JOIN products_description ON products.product_id = products_description.product_id
  JOIN products_to_categories ON products.product_id = products_to_categories.product_id
WHERE  `products_to_categories`.`categories_id` <> '91' 
ORDER BY `products`.`products_model` DESC
0 голосов
/ 15 февраля 2012

Попробуйте

SELECT products_model, products_name
  FROM products
       NATURAL JOIN products_description
       NATURAL JOIN products_to_categories;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...