簡體   English   中英

我需要參加嗎?

[英]Do I need a join?

我有3個表:產品,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作為主鍵,我正在嘗試基於此鏈接所有這三個表。 我認為我需要加入,因為我似乎無法使所有三個在一個陳述中都相等?

你可以用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

嘗試

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

無論如何,更現代的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

盡量不要在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
    SELECT `products`.`products_model`, `products_description`.`products_name`

FROM產品,products_description,products_to_categories 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

試試這個,我認為它像您的查詢一樣更好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM