mysql按名称将列分组在一起

时间:2013-02-23 02:44:09

标签: mysql sql join

我试图创建一个演示来解释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使用它自己的分组。原因是LEFT和RIGHT JOIN不关心你如何将数据显示在输出中 - 他们关心的是连接到RIGHT和LEFT的表。而且这并不能很好地扩展。我只想看看JOIN看到了什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是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应该是内部联接。笛卡尔积应使用cross 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的一个问题。