2012-07-03 74 views
1

我加入了兩個SELECTS。第一個檢索:MySQL-左連接顯示比預期多的行

t1 
id value 
1 149 
2 149 
3 149 
4 149 

第二個:

t2 
id value 
149 2 
149 13 
149 145 
149 149 

所以,我加入T1 /上t1.value = t2.id T2。但結果如下:

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 

我認爲出現的問題,因爲這是選擇,而不是表。谷歌搜索了很多後,我找不到任何解決方案。

編輯: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 

選擇分別檢索Table 1和表2。

+2

請發表您的查詢和表格結構 – FabioCosta

回答

0

Mysql基於VALUES加入ROWS,這與僅加入VALUES不同。

在你的數據集中,應該有4 * 4行返回,這正是你得到的,所以你的查詢沒有問題。你的期望是錯誤的。

例如:

T1的第一行:1 149 你可以看到自己,你的連接匹配T2的所有行,所以有4行返回。 t1的所有下一行都是一樣的,總共返回16行。

編輯:檢查:

SELECT @rownum:[email protected]+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 
+0

您完全正確@Sebas。愚蠢的錯誤。那麼,我的問題仍然存在¿如何獲得所需的表格? – Cristobal

+0

我不確定你對「表格」的使用情況。你想修改你的結構還是改變你的查詢來獲得所需的結果? – Sebas

+0

我從第一個選擇構建了一個索引序列,然後是一個產品ID,最後是一些產品值。我想要一個查詢來獲得問題的最終表格。正如你所說,我的查詢執行1 *查詢,我需要的是1-1結果 – Cristobal

0

我覺得你目前的結果是正確的。 舉一個例子, 假設t1中的id唯一標識一個男人&的價值就是他正在購物的沃爾瑪商店#。 假設t2中的id是沃爾瑪商店#,價值是每個沃爾瑪商店中所有物品的商品編號列表。

因此,每個人都可以從沃爾瑪商店#149購買所有東西。 結論 - 你真的想要做什麼?