根据每列中的值查找许多表中的值

时间:2015-07-15 00:35:57

标签: postgresql

我有几个表包含数据库中的不同字段的键值对。我还有一个表,其中包含这些不同表的键,应该选择这些表作为该键的值。但是,我无法弄清楚如何从多个表中选择这些值?

表格

CREATE TABLE CHARACTERS(
  ID INTEGER PRIMARY KEY,
  NAME VARCHAR(64)
);

CREATE TABLE MEDIA(
  ID INTEGER PRIMARY KEY,
  NAME VARCHAR(64)
);

CREATE TABLE EPISODES(
  ID INTEGER PRIMARY KEY,
  MEDIAID INTEGER,
  NAME VARCHAR(64)
);
-- Selecting from this table
CREATE TABLE APPS(
  ID INTEGER PRIMARY KEY,
  CHARID INTEGER,
  EPISODEID INTEGER,
  MEDIAID INTEGER
);

我从APPS表中进行选择,并且我想将*ID列的值替换为包含表NAME列中名称的值。我想为APPS表中的每一行完成此操作。像这样......

CHARID    -> CHARACTERS.NAME
EPISODEID -> EPISODES.NAME
MEDIAID   -> MEDIA.NAME

我曾尝试使用连接,但它们不会对APPS表中的每一行执行此操作。我在APPS表中有18行,但是我的表格比我在表中所用的方式还要多,而且比表中的方式还要多。那么如何才能让它为APPS表中的每一行做到这一点?

1 个答案:

答案 0 :(得分:2)

通过JOIN将表格放在一起并从各个表格中选择所需的列:

SELECT c.name AS character_name, e.name AS episode, m.name AS media
FROM apps a
LEFT JOIN episodes e ON e.id = a.episodeid
LEFT JOIN media m ON m.id = a.mediaid
LEFT JOIN characters c ON c.id = a.charid;

如果要以特定顺序显示行,则可以将其指定为SELECT语句中的最后一个子句。您可以使用包含的表中的任何字段;该字段不一定是所选列的一部分:

ORDER BY a.id -- order by apps.id

ORDER BY e.id, c.name -- order first by episode id, then by character name