2012-03-06 33 views
-1

鉴于表创建SQL和插入SQL,我将如何生成一个查询以特定方式显示信息?如何使用内部连接查询多个表?

CREATE TABLE cities (
    id serial NOT NULL UNIQUE PRIMARY KEY, 
    iname varchar(100) NOT NULL UNIQUE 
) 

CREATE TABLE suburbs (
    id serial NOT NULL UNIQUE PRIMARY KEY, 
    icity integer REFERENCES cities (id), 
    iname varchar(100) NOT NULL UNIQUE 
) 
CREATE TABLE type (
    id serial NOT NULL UNIQUE PRIMARY KEY, 
    iname varchar(100) NOT NULL UNIQUE 
) 
CREATE TABLE sale (
    id serial NOT NULL UNIQUE PRIMARY KEY, 
    iname varchar(100) NOT NULL UNIQUE 
) 

CREATE TABLE estate (
    id serial NOT NULL UNIQUE PRIMARY KEY, 
    icity integer REFERENCES cities (id), 
    isuburb integer REFERENCES suburbs (id), 
    itype integer REFERENCES type (id), 
    isale integer REFERENCES sale (id), 
    idescription text, 
    itimestamp timestamp DEFAULT CURRENT_TIMESTAMP 
) 

INSERT INTO cities (iname) VALUES ('Johannesburg'); 
INSERT INTO suburbs (icity, iname) VALUES (1, 'Westbury'); 
INSERT INTO type (iname) VALUES ('Room'); 
INSERT INTO sale (iname) VALUES ('Rent'); 

INSERT INTO estate (icity, isuburb, itype, isale, idescription) VALUES (1, 1, 1, 1, 'A Nice place in a real bad neighbor hood'); 

现在我希望表格中的数值通过它们表示的字符串值来显示。

E.G 1约翰内斯堡,韦斯特伯里,房间,出租,说明

将SQL查询是这个道理,我在使用PostgreSQL更关心。

+0

字面上**所有值的**,像每一个单柱?这是MySQL还是PostgreSQL? – Yuck 2012-03-06 15:48:14

+0

你想在每个表的所有列上做一个'JOIN'?任何你想要这样做的理由? – Karlson 2012-03-06 15:50:38

+0

@Yuck我正在从使用MySQL转换到PostgreSQL,所以它会是postgreSQL,那么从每个表的某些值中,某些表被用作参考表。 – Aaron 2012-03-06 15:50:51

回答

6

首先,他们必须有某种共同的领域。我们假设它们之间的通用字段被称为<tablename>_ID;你做的方式如下:

select A.colx, A.coly, A.colz, B.colx, B.colw, c.cold 
from A inner join B on A.ID=B.A_ID 
    inner join C on C.A_ID=A.ID 
0

你可以这样来做:

SELECT * 
FROM A 
INNER JOIN B 
ON B.id = A.b 
INNER JOIN C 
ON C.id = A.c 
0

检查这个例子按照乌尔疑问句。

SELECT A.*,B.*,C.* 
FROM A , B, C 
WHERE C.c = B.b 
    AND B.b = A.a 
15

你藤尝试像

select * from table1 
inner join table2 on tabl1.pk = table2.FK 
inner join table3 on tabl1.pk = table.FK 

最终

select table2.iname,table3.iname,table4.iname,table1.idescription 
from estate as table1 
inner join sale as table2 on table1.isale = table2.id 
inner join type as table3 on table1.itype = table3.id 
inner join suburbs as table3 on table1.isuburb = table3.id 
inner join cities as table4 on table1.icity = table4.id 

如果你想获得信息关于加入具有看看下面的图片

alt text Ans at:How do I decide when to use right joins/left joins or inner joins Or how to determine which table is on which side?

1

一般情况下,你正在寻找一个加入..

select ct.iname as CityName,sb.name as SuburbName,et.* 
from estate et 
join cities ct on ct.id=et.icity 
join suburbs sb on sb.id=et.isuburb 

等等

2
select suburbs.icity 
     , cities.iname 
     , suburbs.iname 
     , type.iname 
     , sale.iname 
     , estate.idescription 
from estate 
inner join suburbs on suburbs.id = estate.isuburb 
inner join cities on cities.id = estate.icity 
inner join type on type.id = estate.itype 
inner join sale on sale.id = estate.isale 
0
-> select * from estate 
-> inner join cities on estate.icity=cities.id 
-> inner join suburbs on estate.isuburb=suburbs.id 
-> inner join type on estate.itype=type.id 
-> inner join sale on estate.isale=sale.id;