我的查询有点麻烦。
如您所见,我正在运行两个查询。这一切看起来都很好,mysql像个男人一样对待它。但我得到的结果是同样的东西的5倍。
SELECT s.category_id, p.product_id
FROM (
SELECT ros_categories.category_id
FROM ros_categories, ros_variantIndex
WHERE ros_categories.name = ros_variantIndex.variantText
AND ros_categories.group = 'Sizes'
LIMIT 0 , 5
) s, (
SELECT ros_product.product_id
FROM ros_product, ros_variantIndex
WHERE ros_product.vart = ros_variantIndex.vart
LIMIT 0 , 5
) p输出:
+-------------+------------+
| category_id | product_id |
+-------------+------------+
| 110 | 1 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 10 | 1 |
| 110 | 1 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 10 | 1 |
| 110 | 1 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 10 | 1 |
| 110 | 1 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 10 | 1 |
| 110 | 1 |
| 7 | 1 |
| 8 | 1 |
| 9 | 1 |
| 10 | 1 |
+-------------+------------+
25 rows in set (0.01 sec)这里发生什么事情?这是我的问题,还是mysql很奇怪?
编辑:
谢谢你向我解释问题出在哪里。我使用几个joins修复了它。所以,谢谢你指出我的错误并给问题命名:-),对于这个愚蠢的问题,我很抱歉
发布于 2011-09-08 23:15:28
这是怎么回事?这是我的问题,还是mysql很奇怪?
您所做的是创建一个笛卡尔乘积,也称为Cross Join。通常,您只是连接s和p来获得您想要的东西,但是连接标准并不明确。
也许您想要这样(在表中猜测列)
SELECT s.category_id, p.product_id
FROM (
SELECT ros_categories.category_id
FROM ros_categories, ros_variantIndex
WHERE ros_categories.name = ros_variantIndex.variantText
AND ros_categories.group = 'Sizes'
LIMIT 0 , 5
)s
INNER JOIN (
SELECT ros_product.product_id, ros_product.category_id
FROM ros_product, ros_variantIndex
WHERE ros_product.vart = ros_variantIndex.vart
LIMIT 0 , 5
)p
on s.category_id = p.category_id发布于 2011-09-08 23:15:37
它只是两个临时表的叉积,这些临时表分别表示子查询的结果集。
https://stackoverflow.com/questions/7350331
复制相似问题