Как запросить несколько таблиц, используя внутреннее соединение? - PullRequest
0 голосов
/ 06 марта 2012

Учитывая 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');

Теперь я хочу, чтобы числовые значения в табличном состоянии отображались в виде строковых значений, которые они представляют.

например 1 Йоханнесбург, Вестбери, Комната, Аренда, Описание

Что будет для этого с SQL-запросом, я больше заинтересован в использовании postgreSQL.

Ответы [ 7 ]

15 голосов
/ 06 марта 2012

Вы можете попробовать как

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 Ответы на: Как мне решить, когда использовать правые или левые или внутренние объединения или как определить, какая таблица на какой стороне?

6 голосов
/ 06 марта 2012

Во-первых, у них должно быть какое-то общее поле.Давайте предположим, что общее поле между ними называется <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
2 голосов
/ 06 марта 2012
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
1 голос
/ 06 марта 2012

В общем, вы ищете присоединиться ..

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

и т. Д. *

0 голосов
/ 07 марта 2012
 -> 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;
0 голосов
/ 06 марта 2012

Проверьте этот пример согласно вашему заданию.

SELECT A.*,B.*,C.*
FROM A , B, C
WHERE C.c = B.b
  AND B.b = A.a
0 голосов
/ 06 марта 2012

Вы можете сделать это так:

SELECT *
FROM A
INNER JOIN B 
ON B.id = A.b
INNER JOIN C
ON C.id = A.c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...