繁体   English   中英

如何使用内部联接查询多个表?

[英]How do I query multiple tables using inner join?

给定表创建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');

现在,我希望表属性中的数字值由它们表示的字符串值显示。

约翰内斯堡EG 1号酒店,Westbury,客房,租金,描述

SQL Query的用途是什么,我更关心使用postgreSQL。

你可以尝试像

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 

如果要获取有关联接的信息,请查看下图

替代文字 回答: 如何确定何时使用右连接/左连接或内部连接,或者如何确定哪张表在哪一边?

首先,它们必须具有某种共同的领域。 假设它们之间的公共字段称为<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
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

通常,您正在寻找联接。

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

等等...

你可以这样:

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

根据您的要求检查此示例。

SELECT A.*,B.*,C.*
FROM A , B, C
WHERE C.c = B.b
  AND B.b = A.a
 -> 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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM