1

我加入了两个SELECTS。第一个检索:

t1
id  value
1   149
2   149
3   149
4   149

第二个:

t2 
id  value
149 2
149 13
149 145
149 149

所以,我将加入 t1/t2 t1.value = t2.id。但结果如下:

1   149 2
1   149 13
1   149 145
1   149 149
2   149 2
2   149 13
2   149 145
2   149 149
3   149 2
3   149 13
3   149 145
3   149 149
4   149 2
4   149 13
4   149 145
4   149 149

当所需的结果应如下所示时:

1   149   2
2   149   13
3   149   145
4   149   149

我认为出现问题是因为这是SELECT而不是表。谷歌搜索了很多后,我找不到任何解决方案。

编辑: MySQL 查询:

SELECT t1.id_sequence,t2.id_category, t2.tree
FROM
(
    SELECT * FROM (SELECT 1 AS id_sequence UNION SELECT 2 AS id_sequence UNION SELECT 3 AS id_sequence UNION SELECT 4 AS id_sequence ) as tbl1
    CROSS JOIN (SELECT DISTINCT id_catalog_category AS 'id_category' from catalog_category where id_catalog_category = 149) as tbl2
) as t1
LEFT JOIN 
(
    SELECT child.id_catalog_category AS id_category, ancestor.id_catalog_category AS tree
    FROM catalog_category AS child
    JOIN catalog_category AS ancestor
    ON (child.lft BETWEEN ancestor.lft AND ancestor.rgt)
    WHERE child.id_catalog_category = 149 AND ancestor.id_catalog_category != 1 
) as t2
ON t1.id_category = t2.id_category 

分别选择检索到的 table1 和 table2。

4

2 回答 2

0

我认为你目前的结果是正确的。例如,假设 t1 中的 id 唯一标识了一个人,并且值是他正在购物的沃尔玛商店#。假设 t2 中的 id 是 Walmart store #,value 是每个 Walmart 商店中所有物品的商品编号列表。

因此,每个人都可以从 Walmart store #149 购买所有商品。结论 - 你真正想做什么?

于 2012-07-09T15:06:02.500 回答
0

Mysql 基于 VALUES 加入 ROWS,这与仅加入 VALUES 不同。

在您的数据集中,应该返回 4*4 行,这正是您得到的,因此您的查询没有问题。你的期望是错误的。

例如:

t1 的第一行:1 149 您可以看到自己的连接匹配 t2 的所有行,因此返回了 4 行。这对于 t1 的所有下一行都是相同的,总共返回 16 个。

编辑:检查这个:

SELECT @rownum:=@rownum+1 as `id`, t2.* 
FROM (
    SELECT child.id_catalog_category AS id_category, ancestor.id_catalog_category AS tree
    FROM catalog_category AS child
    JOIN catalog_category AS ancestor
    ON (child.lft BETWEEN ancestor.lft AND ancestor.rgt)
    WHERE child.id_catalog_category = 149 AND ancestor.id_catalog_category != 1 
) as t2
于 2012-07-03T17:57:09.953 回答