zhallalxj 2017-05-08 08:53 采纳率: 100%
浏览 4363
已采纳

MySQL多表连接查询,一对多

有4个表,

attr表

字段名 类型
id BIGINT
name VARCHAR
amount BIGINT

prop表

字段名 类型
id BIGINT
name VARCHAR
status BIGINT

prop_attr表

字段名 类型
id BIGINT
prop_id BIGINT
attr_id BIGINT

commodity表

字段名 类型
id BIGINT
prop_id BIGINT
name VARCHAR
price DOUBLE

这几个表,一个prop可以关联多个attr数据,
使用prop_attr表来关联,是1对多,一个commodity只能关联一个prop,现在要实现以下查询功能:

查询 commodity表中的数据,但是 因为prop可以关联多个attr,所以 希望一条commodity中的数据能带上全部的attr数据,mysql查询语句么写

  • 写回答

6条回答 默认 最新

  • zhallalxj 2017-05-09 02:31
    关注

    好吧,用mybatis解决了

     <resultMap id="BaseResultMap" type="com.niuwan.mall.model.Commodity">
    
            <id column="id" jdbcType="BIGINT" property="id"/>
            <result column="state" jdbcType="INTEGER" property="state"/>
            <result column="status" jdbcType="INTEGER" property="status"/>
            <result column="name" jdbcType="VARCHAR" property="name"/>
            <result column="prop_id" jdbcType="BIGINT" property="propId"/>
            <result column="classify_type" jdbcType="INTEGER" property="classifyType"/>
            <result column="price" jdbcType="DOUBLE" property="price"/>
            <result column="amount" jdbcType="BIGINT" property="amount"/>
            <result column="fpath" jdbcType="VARCHAR" property="fpath"/>
            <result column="explain" jdbcType="VARCHAR" property="explain"/>
            <result column="user_id" jdbcType="BIGINT" property="userId"/>
            <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
            <result column="modify_time" jdbcType="TIMESTAMP" property="modifyTime"/>
    
            <collection property="attributeList" column="attribute" ofType="com.niuwan.mall.model.Attribute">
                <id column="attr_id" jdbcType="BIGINT" property="id"/>
                <result column="attr_name" jdbcType="VARCHAR" property="attrName"/>
                <result column="attr_type" jdbcType="BIGINT" property="attrType"/>
                <result column="attr_amount" jdbcType="BIGINT" property="attrAmount"/>
                        <!--select="com.foo.bean.PostMapper.selectByBlogId"-->
            </collection>
        </resultMap>
    
            <select id="selectCommodityList" resultMap="BaseResultMap" parameterType="Map">
            SELECT c.*,a.id AS attr_id,a.attr_name AS attr_name,a.attr_amount AS attr_amount,a.attr_type AS attr_type
    
            FROM commodity AS c
            LEFT JOIN prop_attribute AS pr ON c.prop_id = pr.prop_id
            LEFT JOIN attribute AS a ON pr.attr_id = a.id
            WHERE 1=1
            <if test="status != null">
                AND c.status = #{status}
            </if>
    
            <if test="name != null">
                AND c.name like #{name}
            </if>
    
            <if test="orderByClause != null">
                order by ${orderByClause}
            </if>
    
            limit ${offset}, ${limit}
    
        </select>
    
    
    
    

    bean中定义

     private List<Attribute> attributeList;
    

    这样就能 查询一个commodity的时候查询多个attr了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含