【发布时间】:2015-01-05 11:33:25
【问题描述】:
我有 5 张桌子:
-
网站
- 身份证
- 网站名称
-
类别
- 身份证
- 姓名
-
产品
- 身份证
- 姓名
- 还有更多的列
-
x_products_site
- product_id
- site_id
-
x_products_categories
- product_id
- category_id
现在,我想要一个类别的产品的所有数据(假设所有来自 id 1 的类别),但只有一个产品是针对特定网站的。
我的第一次尝试是
SELECT p.*
FROM `products` p,
`categories` c,
`x_product_site` xps,
`x_product_category` xpc
WHERE c.`id` = '%1\$s'
AND c.`id` = xpc.`category_id`
AND xpc.`product_id` = xps.`product_id`
AND p.`id` = xpc.`product_id`
ORDER BY p.`name` ASC
显然这不是办法。
有人可以给我一个带或不带连接的正确查询吗?
【问题讨论】:
-
你为什么不使用一些ORM?在 ORM 中,这将是小菜一碟,而手疼。
-
@MightyPork 世界上到处都是你不能“只使用 ORM” 的应用程序——大量现有的应用程序不会被转换,例如例子。
-
使用Join,添加AND运算符不是解决办法。
-
查看 MySQL 手册中的
JOIN语法。如果这些都是完全连接(两边都需要一个表),那么只需使用INNER JOIN。 -
您应该改进问题的标题以反映您要解决的特定 sql 问题。此外,请改进以下句子的语法,因为恐怕不是很清楚:“现在,我想要一个类别的产品的所有数据(假设所有来自 id 1 的类别)但只有一个产品的数据是用于特定网站。”
标签: mysql sql select join where