涉及交叉连接、唯一性等的MySQL查询
谢天谢地,我以前不必处理特别复杂的SQL查询。这是我的目标 我有一个表涉及交叉连接、唯一性等的MySQL查询,sql,mysql,join,Sql,Mysql,Join,谢天谢地,我以前不必处理特别复杂的SQL查询。这是我的目标 我有一个表hams,我想将它与表egs交叉连接-也就是说,获取所有火腿蛋组合。。。在某种程度上 eggs表还有一个属性how_cooke,定义为ENUM('over-easy'、'scrambled'、'poached')我想要一个结果集,列出火腿和鸡蛋烹饪方法的所有可能组合,以及一个这样烹饪的鸡蛋样本。(我不在乎具体是哪种鸡蛋。) 因此,如果3个火腿的id分别为1、2和3,每个烹饪方法有3个鸡蛋,那么我的结果集应该如下所示: +---
hams
,我想将它与表egs
交叉连接-也就是说,获取所有火腿蛋组合。。。在某种程度上
eggs
表还有一个属性how_cooke
,定义为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 |
+---------+-----------------+---------+
我相信我可以在这里或那里用大量的子查询拼凑出一些解决方案,但MySQL有什么优雅的方法可以做到这一点吗?通过认真思考和谷歌搜索,我可能找到了一个很好的解决方案:
SELECT * FROM hams, eggs GROUP BY hams.id, eggs.how_cooked
它似乎起作用了。真的那么简单吗?通过认真思考和谷歌搜索,我可能找到了一个很好的解决方案:
SELECT * FROM hams, eggs GROUP BY hams.id, eggs.how_cooked
SELECT hams.id, eggs.how_cooked, eggs.id
FROM hams
CROSS JOIN eggs
它似乎起作用了。真的那么容易吗
SELECT hams.id, eggs.how_cooked, eggs.id
FROM hams
CROSS JOIN eggs
这就成功了交叉连接
与,
同义,但在MySQL中具有更高的优先级
这就成功了交叉连接
与,
同义,但在MySQL中具有更高的优先级
它是有效的,但这只是因为你不在乎哪个鸡蛋。选择不在
分组依据中的列的SQL行为定义不明确。然而,根据我的经验,它总是返回一个有效值。另外,只要eggs
在枚举中包含每个值至少一次(当然,这看起来是一个非常安全的假设),这就行了。很好-我很高兴知道事实上存在定义良好的gotchas,因为如果没有任何明显的gotchas,我肯定会出现模糊的gotchas。谢谢mysql是唯一一个允许你这样做的数据库,我认为这是错误的,因为它诱使你相信无关数据实际上与聚合数据有关。是的,它是有效的,但只是因为你不在乎哪个鸡蛋。选择不在分组依据中的列的SQL行为定义不明确。然而,根据我的经验,它总是返回一个有效值。另外,只要eggs
在枚举中包含每个值至少一次(当然,这看起来是一个非常安全的假设),这就行了。很好-我很高兴知道事实上存在定义良好的gotchas,因为如果没有任何明显的gotchas,我肯定会出现模糊的gotchas。谢谢mysql可能是唯一一个允许您这样做的数据库,我认为这是错误的,因为它让您相信无关数据实际上与聚合数据相关。