简体   繁体   English

我需要参加吗?

[英]Do I need a join?

I have 3 tables: products, products_description, products_to_categories 我有3个表:产品,products_description,products_to_categories

Here is my sql: 这是我的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. 所有这三个表都将products_id作为主键,我正在尝试基于此链接所有这三个表。 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 你可以用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
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. 无论如何,更现代的JOIN通常优先于旧的隐式连接语法。 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 . 它提供了有关表如何关联的更易读的图片,并且通过仅在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

Try not to use commas in your FROM clause. 尽量不要在FROM子句中使用逗号。 It's a hold-over from a much older version of the sql standard, and not really considered a good practice any more. 它是sql标准的更旧版本的延续,并不再被认为是一个好习惯。 Just about everywhere you use TableA,TableB syntax right now you should learn to use TableA INNER JOIN TableB ON instead. 几乎在任何地方你使用TableA,TableB语法,你现在应该学习使用TableA INNER JOIN TableB ON

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

try this i think it work better like your query 试试这个,我认为它像您的查询一样更好

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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