我有3张桌子:
section
=======
id
cat
===
id
section_id
product
=======
id
cat_id
我想选择与某个部分匹配的所有产品。有没有办法在单个查询中执行此操作?
答案 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>