mysql 按名称将列分组在一起

标签 mysql sql join

我试图创建一个演示来解释如何加入,但遇到了一些困难。

CREATE TABLE sample (
  id INT
);

INSERT INTO sample VALUES (1),(2),(3),(4);

这是我的架构。

SELECT *
FROM sample AS s1
JOIN sample AS s2;

如果你这样做,你会得到这个:

1,1
1,2
1,3
1,4
2,1
2,2
...
4,3
4,4

至少 JOIN 看到的是这样的。但是,如果您尝试运行它,您会得到一列,其值等于第一列。我不想要这样 - 我想要两列。

我可以用s1.*, s2.*代替*,但是我希望SQL使用它自己的分组。原因是左连接和右连接不关心数据如何出现在输出中 - 它们只关心连接到右连接和左连接的表。而且这并不能很好地扩展。我只是想看看 JOIN 看到了什么。

有什么想法吗?

最佳答案

这是 MySQL 的一个特性。具有相同名称的列在输出时被“组合”成单个列。我不认为这是符合 ANSI 的行为。

要演示连接,请尝试以下操作:

select s1.id as id1, s2.id as id2
FROM sample s1 cross join
     sample s2;

这会重命名列,因此两者都会出现在输出中。另外,我将 join 重命名为 cross join。在 MySQL 中,join 可用于常规联接或笛卡尔积,具体取决于 on 子句的存在。我发现这种行为令人困惑。 join 应该是内部联接。笛卡尔积应使用交叉连接

这在 SQLFiddle 上似乎很奇怪。当我在 SQL Fiddle for SQL Server 上运行此代码时,我得到了与您相同的结果。但是,当我在本地 SQL Server 上运行此代码时,我得到两列:

CREATE TABLE sample (
  id INT
);

INSERT INTO #sample VALUES (1),(2),(3),(4);

SELECT *
FROM sample AS s1
cross JOIN sample AS s2;

这似乎是 SQL Fiddle 的问题。

关于mysql 按名称将列分组在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15036441/

相关文章:

Mysql查询5张表

php - 什么更好?国家、州和城市是否在数据库中?

sql - 如何将雪花中单词的第一个字母大写?

Mysql sum distinct 基于包含多个LEFT JOIN的其他列

MYSQL移动平均计算优先级无限制

sql - 增加所有行的 FK 列值 SQL

mysql不允许在插入查询中使用转义字符

php - Mysql数据库是否关闭

php - 使用 php 的 json 对象内的数组和 json 对象内的对象

sql - 选择比较两列的案例