SQL 语句,postgres的数据库的连表查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 语句,postgres的数据库的连表查询相关的知识,希望对你有一定的参考价值。

第一个表A的结构为

CREATE TABLE onecard_parking_cardhistory
(
uuid character varying(128) NOT NULL, -- 流水号
cardsequence character varying(32),
incomingtime timestamp without time zone NOT NULL,
entranceid integer,
entranceinfo character varying(64),
incominggate integer,
incominggateinfo character varying(64),
incomingcapturehead character varying(512),
incomingcapturetail character varying(512),
entranceinouttype integer NOT NULL,
swipecardtype integer,
CONSTRAINT pk_onecard_parking_cardhistory PRIMARY KEY (uuid)
)
第二个表B的结构为
CREATE TABLE onecard_parking_bill
(
parkingbillingnumber character varying(128) NOT NULL,
uuid character varying(128), -- 流水号
incomingtime timestamp without time zone,
incominggate integer,
incominggateinfo character varying(64),
incomingcapturehead character varying(512),
incomingcapturetail character varying(512),
outgoingtime timestamp without time zone,
CONSTRAINT pk_onecard_parking_bill PRIMARY KEY (parkingbillingnumber)
)

现在希望根据A表与B表的uuid联合查找
A与B是一对多的关系
查出的结果希望首先安装outgoingtime倒序排列,如果outgoingtime为空则按照incoming正序排列
差出的结果希望uuid唯一

参考技术A select distinct A.uuid from onecard_parking_cardhistory as A left join onecard_parking_bill as B
on A.uuid=B.uuid order by outgoingtime desc incoming追问

执行错误的

追答

select distinct A.uuid from onecard_parking_cardhistory as A left join onecard_parking_bill as B
on A.uuid=B.uuid order by outgoingtime desc,incoming

这个你再执行一下。 刚才排序的忘了加逗号

追问

select distinct A.uuid from onecard_parking_cardhistory as A left join onecard_parking_bill as B

on A.uuid=B.uuid order by B.outgoingtime desc,B.incomingtime

加逗号也不对的

追答

我想问一下 你问的问题是:查出的结果希望uuid唯一 ,就是只需要查出uuid 来 且需要不重复 是不? 如果只需要查一个uuid 那直接查第一张表 用distinct 就好了,且不能排序。 如果你不需要去重复 则把上面sql 的distinct 去掉 就可以。 (用了distinct 去重复是不能按其他没查的字段排序,应为数据库给你去重复的时候 ,可能相同uuid对应的outgoingtime值不一样。数据库判断不了按哪个排序)

追问

不是只要查uuid,要查出其他的相关数据的。
哦,好像是这样写吧
select distinct A.uuid, A.*,B.* from onecard_parking_cardhistory as A left join onecard_parking_bill as B
on A.uuid=B.uuid order by B.outgoingtime desc,B.incomingtime

本回答被提问者采纳
参考技术B select * from A
left join B on B.uuid=A.uuid
order by outgoingtime desc,incoming追问

这个语法其实就不对的,再说你这个没有保障uuid唯一

追答

你的表是一对多 如果只查A表可以保证唯一 两个表数据都查还能保证唯一??? 如果能保证唯一就不是一对多了

参考技术C 想法不全,空的outgoingtime在前还是在后?没要求就直接order by outgoingtime desc,incoming追问

这个没要求吧,空的在后面的

以上是关于SQL 语句,postgres的数据库的连表查询的主要内容,如果未能解决你的问题,请参考以下文章

全国排名的问题(linq 的连表查询 等同于sql的left join)

EF的连表查询Lambda表达式和linq语句(转)

视图,触发器,事务

sql语句之连表查询

mysql的sql语句优化5种方式

SQL 查询 - 计算值大于 X 的连续行数