Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
涉及交叉连接、唯一性等的MySQL查询_Sql_Mysql_Join - Fatal编程技术网

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

涉及交叉连接、唯一性等的MySQL查询,sql,mysql,join,Sql,Mysql,Join,谢天谢地,我以前不必处理特别复杂的SQL查询。这是我的目标 我有一个表hams,我想将它与表egs交叉连接-也就是说,获取所有火腿蛋组合。。。在某种程度上 eggs表还有一个属性how_cooke,定义为ENUM('over-easy'、'scrambled'、'poached')我想要一个结果集,列出火腿和鸡蛋烹饪方法的所有可能组合,以及一个这样烹饪的鸡蛋样本。(我不在乎具体是哪种鸡蛋。) 因此,如果3个火腿的id分别为1、2和3,每个烹饪方法有3个鸡蛋,那么我的结果集应该如下所示: +---

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

我有一个表
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可能是唯一一个允许您这样做的数据库,我认为这是错误的,因为它让您相信无关数据实际上与聚合数据相关。