MySQL选择类别

时间:2011-11-30 15:46:33

标签: mysql

我有3张桌子:

section
=======
id

cat
===
id
section_id

product
=======
id
cat_id

我想选择与某个部分匹配的所有产品。有没有办法在单个查询中执行此操作?

3 个答案:

答案 0 :(得分:3)

获取与该部分相关的所有数据:

SELECT * FROM product
INNER JOIN cat ON cat.id=product.cat_id
INNER JOIN section ON section.id=cat.section_id
WHERE section.id = 5

稍微快一点的解决方案将完全忽略节表。

SELECT * FROM product
INNER JOIN cat ON cat.id=product.cat_id
WHERE cat.section_id = 5

答案 1 :(得分:0)

使用(id);

从产品中选择*左连接cat b on(b.id = cat_id)左连接部分

答案 2 :(得分:0)

从单个部分ID中选择所有产品:

SELECT 
    * 
FROM 
    product INNER JOIN cat ON cat.id=product.cat_id
WHERE
    cat.section_id = <section id to filter>

部分ID 4的示例:

SELECT 
    * 
FROM 
    product INNER JOIN cat ON cat.id=product.cat_id
WHERE
    cat.section_id = 4

此外,您可以搜索所有投诉两个或更多ID的项目,例如搜索第1,4和7节的项目:

SELECT 
    * 
FROM 
    product INNER JOIN cat ON cat.id=product.cat_id
WHERE
    cat.section_id in (1,4,7)

使用“其他”部分字段而非部分ID

选择具有证书部分的所有产品
SELECT 
    * 
FROM 
   product
   INNER JOIN cat ON cat.id=product.cat_id
   INNER JOIN section ON section.id=cat.section_id
WHERE
    section.<other field> = <the field value>

带有节字段(例如)“name”并搜索值“节名1”

的示例
SELECT 
    * 
FROM 
   product
   INNER JOIN cat ON cat.id=product.cat_id
   INNER JOIN section ON section.id=cat.section_id
WHERE
    section.name = 'Section name 1'

还建议您更换“*”并仅获取您真正需要的字段。这有助于仅获取所需的数据。

例如,如果您只需要产品中的产品“id”和名为“name”的“ficticius”字段,您应该这样做:(对于第一个示例查询)

SELECT 
    product.id as productId, product.name as productName
FROM 
    product INNER JOIN cat ON cat.id=product.cat_id
WHERE
    cat.section_id = <section id to filter>