如何多次将一个表与另一个表连接?

时间:2014-04-27 09:13:43

标签: mysql sql database relational-database database-schema

我在互联网上搜索了一天,似乎没有任何工作/帮助我。

我有一个表,其中包含用户及其ID的列表,另一个表表示用户禁止其他用户。我将用户ID插入禁止表而不是他们的名字,因为我想规范化我的数据库。

我的用户表如下所示:

CREATE TABLE IF NOT EXISTS `ids` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `name` VARCHAR(32) NOT NULL
) ENGINE = INNODB;

我的禁令表看起来像这样:

CREATE TABLE IF NOT EXISTS `bans` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `banner_id` INT UNSIGNED,
  `banned_id` INT UNSIGNED NOT NULL,
  `reason` VARCHAR(256) DEFAULT NULL
) ENGINE = INNODB;

我想为我的禁令表做一个全选,但是它很容易阅读。 理想情况下它看起来像:

+-------------+-------------+-----------+
| banner_name | banned_name | reason    |
+-------------+-------------+-----------+
| person A    | person B    | being bad |
...

但我无法达到这个结果。我只能得到2/3的结果:

SELECT ids.name AS banner_name, bans.reason 
FROM bans LEFT JOIN (ids) ON (bans.banner_id = ids.id);

然而,添加其他名称列对我来说已经证明是棘手的。 This看起来像一个类似的问题,但是当我试图按照这个例子时,我会得到一些类似

的内容
ERROR 1054 (42S22): Unknown column 'ids.name' in 'field list'

或其他一些语法错误。

感谢您阅读!

1 个答案:

答案 0 :(得分:0)

了解别名。

您可以多次添加同一个表addin别名

例如

FROM bans b 
  JOIN ids as i1 ON b.banner_id = i1.id
  JOIN ids as i2 ON b.banned_id= i2.id