代码之家  ›  专栏  ›  技术社区  ›  Matchu

涉及交叉连接、唯一性等的mysql查询

  •  0
  • Matchu  · 技术社区  · 14 年前

    谢天谢地,我以前不必处理特别复杂的sql查询。这是我的目标。

    我有桌子 hams ,我想把它和桌子交叉连接起来 eggs -也就是说,得到所有的火腿蛋组合…一定程度上。

    这个 鸡蛋 表也有一个属性 how_cooked ,定义为 ENUM('over-easy','scrambled','poached') . 我想要一个结果集,列出火腿和鸡蛋烹调方法的每一种可能的组合,以及一个这样烹调的鸡蛋样本。 (我不在乎是哪个蛋。)

    如果3个火腿 id 在每种烹饪方法的1、2、3和3个鸡蛋中,我的结果集应该如下所示:

    +---------+-----------------+---------+
    | hams.id | eggs.how_cooked | eggs.id |
    +---------+-----------------+---------+
    | 1       | over-easy       | 1       |
    | 1       | scrambled       | 4       |
    | 1       | poached         | 7       |
    | 2       | over-easy       | 1       |
    | 2       | scrambled       | 4       |
    | 2       | poached         | 7       |
    | 3       | over-easy       | 1       |
    | 3       | scrambled       | 4       |
    | 3       | poached         | 7       |
    +---------+-----------------+---------+
    

    我确信我可以在这里和那里用大量的子查询拼凑出一些解决方案,但是有没有什么优雅的方法可以做到这一点呢?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Matchu    14 年前

    通过认真思考和谷歌搜索,我可能找到了一个很好的解决方案:

    SELECT * FROM hams, eggs GROUP BY hams.id, eggs.how_cooked
    

    似乎很管用。真的那么容易吗?

        2
  •  1
  •   Damon    14 年前
    SELECT hams.id, eggs.how_cooked, eggs.id
    FROM hams
      CROSS JOIN eggs
    

    这就是诀窍。 CROSS JOIN , 但在mysql中具有更高的优先级。

    MySQL 5.0 Reference - JOIN syntax