Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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
Sql 根据另一个表的值从另一个表中选择列_Sql_Postgresql_Postgresql 9.4 - Fatal编程技术网

Sql 根据另一个表的值从另一个表中选择列

Sql 根据另一个表的值从另一个表中选择列,sql,postgresql,postgresql-9.4,Sql,Postgresql,Postgresql 9.4,好吧,标题有点乱,但我有一个像这样的桌子城市: id | name | population 1 | Bla bla | 1323 2 | Blaer | 35365 现在我从另一个表中选择一个表: INSERT INTO tmp ( name, age, city_id ) SELECT NAME, AGE, CITY FROM main; 问题是选择城市,因为城市是城市的名称,但我需要id。所以基本上我想要这样的东西,但这不起作用: I

好吧,标题有点乱,但我有一个像这样的桌子城市:

id | name     | population
1  | Bla bla  | 1323
2  | Blaer    | 35365
现在我从另一个表中选择一个表:

INSERT INTO tmp (
    name, age, city_id
)
SELECT
    NAME,
    AGE,
    CITY
FROM main;
问题是选择城市,因为城市是城市的名称,但我需要id。所以基本上我想要这样的东西,但这不起作用:

INSERT INTO tmp (
    name, age, city_id
)
SELECT
    NAME,
    AGE,
    city.id FROM city WHERE city.name = CITY
FROM main;
与city表进行内部联接,并在select子句中使用它

INSERT INTO tmp (
    name, age, city_id
)
SELECT
    NAME,
    AGE,
    c.id 
FROM main m
INNER JOIN city c on m.city=c.name ;

从值中查找id有点不寻常。为什么要将城市存储在主表中?你应该把城市id存储在那里

但一个简单的连接就可以:

INSERT INTO tmp (name, age, city_id)
SELECT
    m.NAME,
    m.AGE,
    c.id
FROM main m join city c on m.city = c.name
试试这个

INSERT INTO tmp(
  name,
  age,
  city_id
)
SELECT 
  m.name AS name,
  m.age AS age,
  (SELECT c.id FROM city c WHERE c.name = m.city) AS city_id
FROM main m