目前是两张表,没有外键,一个是订单主表,一个是明细表,关联关系为两个字段关联的,sql怎么写呢,目前我是在控制层,利用两个字段先去主表查,获取单条记录,再利用这两个字段去明细表查,多条,这是分开查,听说这样总是数据连接,不好,那怎么用sql查询两张表呢,持久层,我用的mybatis,看到的大神,帮忙处理下,谢谢!

解决方案 »

  1.   

    分开查可以的, 两张表一对多,可以连接查询一下.百度 mysql连接查询
      

  2.   

    用join,不要分开查询
      

  3.   

    LZ是否是遇到了单行子查询返回多个值导致的错误?
    如果是的话,用select ... from 表名 inner join 表名 on 条件语句 inner join 表名 on 条件语句......     如果还有限制条件,以此类推下去
      

  4.   

    http://www.cnblogs.com/yyjie/p/7788413.html   看这个的介绍,用左连接或者右连接
      

  5.   

    mybatis的collection标签了解一下
      

  6.   

    用个毛的join,以后拆表的时候恶心死你
      

  7.   

    union all 可以了解下
      

  8.   

    resultMap里
    <collection property="orderDetails" ofType="OrderDetail" column="id">
    ....
    </collection>
    sql 大概这样
    select ... from order left join order_detail
    on order.id=order_detail.order_id
    where ...
      

  9.   

    select * form A left join B on A.id=B.aId
      

  10.   

    用关联查询,left join on
      

  11.   

    select 主表字段 a,明细表字段 b  from 主表 a  left join 明细表 on a.字段1=b.字段1 and a.字段2=b.字段2 ;
      

  12.   

    废话少说,直接上代码,一看就懂<resultMap id="tableAInfoResult" type="tableAInfo">
        <result property="id" column="questionId"/>
        <result property="res" column="res"/>
        <result property="delFlag" column="delFlag"/>
        <collection property="tableBList(实体tableAInfo的属性)" column="{delFlag=delFlag,questionId=questionId}" select="getTableBList" />  
    </resultMap><sql id="tableAColumns">
    a.question_id AS id,
    a.res AS res,
    a.del_flag AS delFlag
    </sql><select id="get" resultType="tableAInfoResult" >
    SELECT 
       <include refid="tableAColumns"/>
    FROM tableA a
    WHERE a.id = #{id}
    </select> <select id="getTableBList" parameterType="java.util.HashMap" resultType="实体路径.entity.TableB">
            select 
                b.id AS "id",
                b.res AS "res",
                b.del_flag AS "delFlag"
            FROM tableB b
            where b.del_flag = #{delFlag}
                AND b.question_id = #{questionId}
                ORDER BY b.question_no ASC
       </select>