[英]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.