我的查询有点麻烦。
正如您所看到的,我正在运行两个查询。这一切看起来都很好,而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很奇怪?
编辑:
感谢您解释我的问题所在。我用几个连接修复了它。所以,谢谢你指出我的错误并命名问题:-)并抱歉回答这个愚蠢的问题
答案 0 :(得分:2)
这里发生了什么?这是我的问题还是mysql很奇怪?
您所做的就是创建一个笛卡尔积,也称为Cross Join。通常你只是加入s和p来获得你想要的东西,但是JOIN标准并不清楚。
也许你想要这个(猜测你桌子上的列)
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
答案 1 :(得分:0)
它只是两个临时表的叉积,表示子查询的相应结果集。