首页 新闻 会员 周边

play框架中的sql语句

0
悬赏园豆:20 [已解决问题] 解决于 2015-12-15 12:55

"select distinct p from Post p join p.tags as t where t.name = ?", tag

join为什么要这样用?这是啥意思?

monkey456的主页 monkey456 | 初学一级 | 园豆:107
提问于:2015-12-14 20:39
< >
分享
最佳答案
0

http://www.cnblogs.com/yiki/archive/2007/01/04/611452.html

 

你这贴出来的语句不对吧   p又是表的别名   又当列名用   

收获园豆:20
_Arnold | 小虾三级 |园豆:635 | 2015-12-15 12:07

但是这个语句是对的

monkey456 | 园豆:107 (初学一级) | 2015-12-15 12:21

@monkey456:  

那你把表结构贴出来

_Arnold | 园豆:635 (小虾三级) | 2015-12-15 12:24

这不是纯sql语句,是play框架中的

monkey456 | 园豆:107 (初学一级) | 2015-12-15 12:24

@monkey456:  

http://zhidao.baidu.com/link?url=7MDLnmu0tKeenrhNjxTfl5NUNCHL4AEV2E1Zuu8YFHjGKxDdD-ALtE0FsAYEd5rG6ine2HdteOZlBagqXnc_Tw7FF2029gbacOdUbi2C6aK

 

 

看完这个你就懂  join是什么意思了  

_Arnold | 园豆:635 (小虾三级) | 2015-12-15 12:26

package models;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Lob;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import play.data.validation.MaxSize;
import play.data.validation.Required;
import play.db.jpa.Model;
@Entity
public class Post extends Model{
@OneToMany(mappedBy="post", cascade=CascadeType.ALL)
public List<Comment> comments;
@Required
public String title;
@Required
public Date postedAt;
@Lob
@Required
@MaxSize(10000)
public String content;
@Required
@ManyToOne
public User author;
@ManyToMany(cascade=CascadeType.PERSIST)
public Set<Tag> tags;

monkey456 | 园豆:107 (初学一级) | 2015-12-15 12:27

只有这个,表示自动生成在内存数据库的

monkey456 | 园豆:107 (初学一级) | 2015-12-15 12:28

@monkey456: 

这个是ORM  映射数据实体类吧     play  是基于 Hibernate的框架      Hibernate 肯定得设置表与  数据实体类的映射关系    得找到那个映射文件才能看到表结构,既然都有Hibernate了    你为什么还要直接用  sql呢?   直接用Hibernate的类不就行了吗

_Arnold | 园豆:635 (小虾三级) | 2015-12-15 12:33

@xiaoxiao刀: 对

monkey456 | 园豆:107 (初学一级) | 2015-12-15 12:33

@xiaoxiao刀: 这是别人写的,就是不知道才问阿

monkey456 | 园豆:107 (初学一级) | 2015-12-15 12:40

@monkey456: 

select distinct p from Post p join p.tags as t where t.name = ?

只能这么告诉你了  

select distinct(去重) p(应该是列名,这里用p不知道是什么含义,得看表结构) from Post(表名)  p(表别名)  join  p.tags(post 表的tags字段)  as  t(组合后的表名)  where t.name(t表的name字段值条件) =? 

如果还看不懂我就没招了 。。

_Arnold | 园豆:635 (小虾三级) | 2015-12-15 12:44

@xiaoxiao刀: 这个我是知道的,但是这种写法有点奇怪阿,join用在这里是干嘛用的,以前从没见过这种用法。不过,还是谢谢你了

monkey456 | 园豆:107 (初学一级) | 2015-12-15 12:47

@monkey456: 

join是组合成新表用啊 。。。。    当你从多个表取值的时候   就得用join  组合成一个新的临时表  再select呀     不然两个表  你怎么把想取的数据取出来呢   

_Arnold | 园豆:635 (小虾三级) | 2015-12-15 12:49

@monkey456: 

表a                       表b    
a1    a2                 b1     b2    

a01     张三         a02     数学    

a02     李四         a03     语文    

a03     王五         a04     英语    

 

这两个表让你一次性取出李四和王五的相关数据   你直接select  出得来吗?只能用join啊

_Arnold | 园豆:635 (小虾三级) | 2015-12-15 12:53

@xiaoxiao刀:好的,谢谢!

monkey456 | 园豆:107 (初学一级) | 2015-12-15 12:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册