1

私は2つのSELECTSに参加しています。最初のものは以下を取得します:

t1
id  value
1   149
2   149
3   149
4   149

2つ目:

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

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 に答える
0

あなたの現在の結果は正しいと思います。例として、t1 の id が男性を一意に識別し、値が彼が買い物をしているウォルマート ストア # であると仮定します。t2 の id が Walmart store # であると仮定すると、value はすべての Walmart ストアのすべてのアイテム番号リストです。

したがって、すべての人がウォルマート ストア # 149 からすべてを購入できます。 結論 - あなたは本当に何をしようとしていますか?

于 2012-07-09T15:06:02.500 に答える