简体   繁体   中英

Do I need a join?

I have 3 tables: products, products_description, products_to_categories

Here is my 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 

all three tables have products_id as the primary key and I am trying to link all three based on that. I think I need a join because I cant seem to make all three just be equal in one statement?

You could do it with a JOIN but if you wanna use a Where statement that's fine, but you'll have to use AND to make it happen

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 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

Try

SELECT products_model, products_name
  FROM products
       NATURAL JOIN products_description
       NATURAL JOIN products_to_categories;

The more modern JOIN is generally preferred to the old implicit join syntax anyway. It presents a much more readable picture of how the tables relate, and allows a clearer WHERE clause by including only the actual limiting condition in 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

Try not to use commas in your FROM clause. It's a hold-over from a much older version of the sql standard, and not really considered a good practice any more. Just about everywhere you use TableA,TableB syntax right now you should learn to use TableA INNER JOIN TableB ON instead.

In this case, though, you could get away with it like this:

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

But again, you really should learn to write that like this:

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
    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_to_categories . products_id = products . products_id AND products_description . products_id = products_to_categories . products_id products_to_categories . products_id AND products_to_categories . categories_id <> '91' ORDER BY products . products_model DESC

try this i think it work better like your query

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM