【问题标题】:Select data with Join使用 Join 选择数据
【发布时间】:2016-06-09 02:08:00
【问题描述】:

我想从表中选择具有相同 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 作为级联删除的两个表中的主键。

【问题讨论】:

  • 您要选择所有用户及其帐户吗?另外,ACCOUNT_ROLE 表应该有 ACCOUNT_NAME 列,不是吗?
  • 你有 2 个表,都有一个名为 Id 的列,两者之间没有明显的关系。需要更多信息彼得。
  • @MikhailChibel 是的,你也可以给我看看吗?
  • @AshwinNair 我用完整的代码更新了帖子。

标签: sql postgresql postgresql-9.3 postgresql-9.4


【解决方案1】:

看起来你只是想要一个简单的加入

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 行:选择 A.ID A.USER_NAME、A.PASSWD TEXT、A.FIRST_NAME TEXT、-...
【解决方案2】:
SELECT * FROM ACCOUNT_ROLE INNER JOIN ACCOUNT ON ACCOUNT.ID=ACCOUNT_ROLE.ID

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

【讨论】:

  • 我收到Caused by: org.postgresql.util.PSQLException: ERROR: ORDER BY "id" is ambiguous
  • 您使用的是Order by 子句吗?如果是这样,您需要对其进行限定。例如:order by Account.Id
  • 彼得,你最好先为初学者阅读 sql。 google.co.nz/url?sa=t&source=web&rct=j&url=http://…
  • 是的,我试过这个SELECT * FROM ACCOUNT_ROLE INNER JOIN ACCOUNT ON ACCOUNT.ID = ACCOUNT_ROLE.ID ORDER BY Account.%S Account.%S offset ? limit ? 但我得到了原因:org.postgresql.util.PSQLException: ERROR: syntax error at or near "Account" Position: 99 正确的使用方法是什么订购?
猜你喜欢
  • 2018-08-27
  • 1970-01-01
  • 2014-08-10
  • 2017-11-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
相关资源
最近更新 更多