使用Join选择数据

时间:2016-06-09 02:08:01

标签: sql postgresql postgresql-9.3 postgresql-9.4

我想从表中选择具有相同ID的行。

   CREATE TABLE ACCOUNT(
 ID INTEGER NOT NULL,
 USER_NAME TEXT NOT NULL,
 PASSWD TEXT,
 FIRST_NAME TEXT,
 LAST_NAME TEXT,
 E_MAIL TEXT NOT NULL,
 COUNTRY TEXT,
 STATE TEXT,
 CITY TEXT,
 ADDRESS TEXT,
 STATUS INTEGER,
 SECURITY_QUESTION TEXT,
 SECURITY_ANSWER TEXT,
 LAST_PASSWD_RESET DATE,
 DESCRIPTION TEXT,
 LAST_UPDATED DATE,
 CREATED DATE
)
;

-- ADD KEYS FOR TABLE ACCOUNT

ALTER TABLE ACCOUNT ADD CONSTRAINT KEY1 PRIMARY KEY (ID)
;

ALTER TABLE ACCOUNT ADD CONSTRAINT USER_NAME UNIQUE (USER_NAME)
;

ALTER TABLE ACCOUNT ADD CONSTRAINT E_MAIL UNIQUE (E_MAIL)
;

-- TABLE ACCOUNT_ROLE

CREATE TABLE ACCOUNT_ROLE(
 ID INTEGER NOT NULL,
 USER_NAME TEXT NOT NULL,
 ROLE INTEGER,
 PERMISSION TEXT,
 LAST_UPDATED DATE,
 CREATED DATE
)
;

-- CREATE INDEXES FOR TABLE ACCOUNT_ROLE

CREATE INDEX IX_RELATIONSHIP19 ON ACCOUNT_ROLE (ID)
;

-- ADD KEYS FOR TABLE ACCOUNT_ROLE

ALTER TABLE ACCOUNT_ROLE ADD CONSTRAINT KEY26 PRIMARY KEY (ID)
;

ALTER TABLE ACCOUNT_ROLE ADD CONSTRAINT RELATIONSHIP19 FOREIGN KEY (ID) REFERENCES ACCOUNT (ID) ON DELETE CASCADE ON UPDATE CASCADE
;

我需要使用哪种连接查询才能获得具有正确ID的结果? 正如您所看到的,我在两个表中使用ID作为主键,并使用级联删除。

2 个答案:

答案 0 :(得分:2)

看起来你只想要一个简单的连接

select A.*,R.* from Account A inner join Account_Role R on 
A.Id = R.Id

您可以通过修改上述查询来选择所需的列,如下所示:

select A.ID A.USER_NAME, A.PASSWD TEXT, A.FIRST_NAME TEXT, --and so on
R.Id, R.User_name, R.Role_Integer --and so on 
from Account A inner join Account_Role R on 
A.Id = R.Id

答案 1 :(得分:2)

SELECT * FROM ACCOUNT_ROLE INNER JOIN ACCOUNT ON ACCOUNT.ID=ACCOUNT_ROLE.ID

顺便说一句,不要将密码保存为数据库中的明文。使用某种散列。此外,通过主键链接两个表都不是一个好的设计。